# HG changeset patch # User Sebastien Jodogne # Date 1611297378 -3600 # Node ID ef1a1ce0c1e33bf4c26933d33977b4fc5d9bc542 # Parent 46fe70776d610050a699af8db499587ab02f3293 During Orthanc shutdown, wait for all the pending events to have been processed diff -r 46fe70776d61 -r ef1a1ce0c1e3 NEWS --- a/NEWS Thu Jan 21 18:27:06 2021 +0100 +++ b/NEWS Fri Jan 22 07:36:18 2021 +0100 @@ -2,6 +2,7 @@ =============================== * Fix possible deadlock with "orthanc.RegisterOnChangeCallback()" +* During Orthanc shutdown, wait for all the pending events to have been processed Version 3.0 (2020-12-09) diff -r 46fe70776d61 -r ef1a1ce0c1e3 Sources/OnChangeCallback.cpp --- a/Sources/OnChangeCallback.cpp Thu Jan 21 18:27:06 2021 +0100 +++ b/Sources/OnChangeCallback.cpp Fri Jan 22 07:36:18 2021 +0100 @@ -135,6 +135,17 @@ static PyObject* changesCallback_ = NULL; +static void StopThread() +{ + stopping_ = true; + + if (changesThread_.joinable()) + { + changesThread_.join(); + } +} + + static void ChangesWorker() { while (!stopping_) @@ -184,6 +195,12 @@ const char* resourceId) { pendingChanges_.Enqueue(changeType, resourceType, resourceId); + + if (changeType == OrthancPluginChangeType_OrthancStopped) + { + StopThread(); + } + return OrthancPluginErrorCode_Success; } @@ -227,12 +244,7 @@ void FinalizeOnChangeCallback() { - stopping_ = true; - - if (changesThread_.joinable()) - { - changesThread_.join(); - } + StopThread(); { PythonLock lock;