diff --git a/stub-ext/stubext.h b/stub-ext/stubext.h index 5ddf5aa9db7b0007224817c5bd29c48c36bd93da..071070ca047dc6a0a5282afd337d937932889dbe 100644 --- a/stub-ext/stubext.h +++ b/stub-ext/stubext.h @@ -42,25 +42,30 @@ public: StubExt() : Stub() {} template - void set_lamda(T addr, Lamda lamda) + bool set_lamda(T addr, Lamda lamda) { + char *fn = reinterpret_cast(addrof(addr)); + if (m_result.find(fn) != m_result.end()) { + assert(m_result.find(fn) == m_result.end()); + return false; + } + Wrapper *wrapper = nullptr; auto addr_stub = depictShadow(&wrapper,addr,lamda); - set(addr, addr_stub); - char *fn = addrof(addr); - auto iter = m_result.find(fn); - if (iter != m_result.end()) { - m_wrappers.insert(std::make_pair(fn,wrapper)); + if (set(addr, addr_stub)) { + m_wrappers.insert(std::make_pair(fn, wrapper)); + return true; } else { freeWrapper(wrapper); } + return false; } template void reset(T addr) { Stub::reset(addr); - char *fn = addrof(addr); + char *fn = reinterpret_cast(addrof(addr)); auto iter = m_wrappers.find(fn); if (iter != m_wrappers.end()) { freeWrapper(iter->second);