From 7d70dc6dc3f0783025895fed6d3a2918bb8e4e41 Mon Sep 17 00:00:00 2001 From: Claus Date: Thu, 13 May 2021 11:52:40 +0800 Subject: [PATCH] fix: restub check restub --- stub-ext/stubext.h | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/stub-ext/stubext.h b/stub-ext/stubext.h index 5ddf5aa..071070c 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); -- Gitee