Skip to content
This repository has been archived by the owner on Oct 28, 2021. It is now read-only.

Commit

Permalink
Avoid using a mutex after it is destroyed
Browse files Browse the repository at this point in the history
Before this commit, under ThreadSanitizer, this error was visible

WARNING: ThreadSanitizer: use of an invalid mutex (e.g. uninitialized or destroyed) (pid=5256)
    #0 pthread_mutex_lock ??:? (eth+0x48fb60)
    #1 boost::posix::pthread_mutex_lock(pthread_mutex_t*)
/home/yh/.hunter/_Base/b96750b/af8fb19/497273b/Install/include/boost/thread/pthread/mutex.hpp:62 (eth+0x524fb9)
    #2 boost::mutex::lock()
/home/yh/.hunter/_Base/b96750b/af8fb19/497273b/Install/include/boost/thread/pthread/mutex.hpp:116 (eth+0x524fb9)
    #3 boost::unique_lock<boost::mutex>::lock()
/home/yh/.hunter/_Base/b96750b/af8fb19/497273b/Install/include/boost/thread/lock_types.hpp:346 (eth+0x524ebe)
    #4 unique_lock
/home/yh/.hunter/_Base/b96750b/af8fb19/497273b/Install/include/boost/thread/lock_types.hpp:124 (eth+0x524c94)
    #5 boost::shared_mutex::lock_shared()
/home/yh/.hunter/_Base/b96750b/af8fb19/497273b/Install/include/boost/thread/pthread/shared_mutex.hpp:188 (eth+0x5242cb)
    #6 boost::shared_lock<boost::shared_mutex>::lock()
/home/yh/.hunter/_Base/b96750b/af8fb19/497273b/Install/include/boost/thread/lock_types.hpp:645 (eth+0x5240ce)
    #7 shared_lock
/home/yh/.hunter/_Base/b96750b/af8fb19/497273b/Install/include/boost/thread/lock_types.hpp:520 (eth+0x523c84)
    #8 dev::eth::BlockChain::currentHash() const
/home/yh/src/cpp-ethereum2/libdevcore/../libethereum/BlockChain.h:233 (eth+0x5238a6)
    #9 dev::eth::EthereumHost::doWork()
/home/yh/src/cpp-ethereum2/libethereum/EthereumHost.cpp:433 (eth+0x6c9b0c)
    #10 non-virtual thunk to dev::eth::EthereumHost::doWork() ??:?  (eth+0x6caacd)
    #11 dev::Worker::workLoop()
/home/yh/src/cpp-ethereum2/libdevcore/Worker.cpp:139 (eth+0x8507e0)
    #12 operator() /home/yh/src/cpp-ethereum2/libdevcore/Worker.cpp:62 (eth+0x850d3d)
  • Loading branch information
pirapira committed Oct 20, 2017
1 parent 1f11eea commit a07cefc
Showing 1 changed file with 3 additions and 0 deletions.
3 changes: 3 additions & 0 deletions libp2p/Host.cpp
Expand Up @@ -155,6 +155,9 @@ void Host::stop()
// stop worker thread
if (isWorking())
stopWorking();

// This destroyes EthereumHost objects. EthereumHost objects contain a references to Clients' members, so EthereumHost objects need to disappear first.
m_capabilities.clear();
}

void Host::doneWorking()
Expand Down

0 comments on commit a07cefc

Please sign in to comment.