From c8245e83d9f8e6839961a5164df5ffefb411c5b7 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 8 Nov 2018 14:13:27 -0600 Subject: [PATCH] Clearing roots after thread has joined to avoid a use-after-free situation. Boost multi_index iterators remain valid on insertion but not after erasure. --- rai/node/node.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rai/node/node.cpp b/rai/node/node.cpp index dbf59cfe..566973a4 100644 --- a/rai/node/node.cpp +++ b/rai/node/node.cpp @@ -3007,13 +3007,13 @@ void rai::active_transactions::stop () condition.wait (lock); } stopped = true; - roots.clear (); condition.notify_all (); } if (thread.joinable ()) { thread.join (); } + roots.clear (); } bool rai::active_transactions::start (std::shared_ptr block_a, std::function)> const & confirmation_action_a)