diff --git a/src/threading/MsgThread.cc b/src/threading/MsgThread.cc index dc399020da..7d7ab73a50 100644 --- a/src/threading/MsgThread.cc +++ b/src/threading/MsgThread.cc @@ -176,6 +176,7 @@ MsgThread::MsgThread() : BasicThread(), queue_in(this, 0), queue_out(0, this) cnt_sent_in = cnt_sent_out = 0; main_finished = false; child_finished = false; + child_sent_finish = false; failed = false; thread_mgr->AddMsgThread(this); } @@ -185,9 +186,10 @@ extern int signal_val; void MsgThread::OnSignalStop() { - if ( main_finished || Killed() ) + if ( main_finished || Killed() || child_sent_finish ) return; + child_sent_finish = true; // Signal thread to terminate. SendIn(new FinishMessage(this, network_time), true); } diff --git a/src/threading/MsgThread.h b/src/threading/MsgThread.h index 70d6fafc6e..1f5ec0e017 100644 --- a/src/threading/MsgThread.h +++ b/src/threading/MsgThread.h @@ -306,6 +306,7 @@ private: bool main_finished; // Main thread is finished, meaning child_finished propagated back through message queue. bool child_finished; // Child thread is finished. + bool child_sent_finish; // Child thread asked to be finished. bool failed; // Set to true when a command failed. };