changeset 325:669914eab130

cont finalization
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 07 Apr 2026 15:41:27 +0200
parents d8c06c9408c2
children da7716334dac 95fdc00a09d3
files Sources/OnChangeCallback.cpp Sources/StorageArea.cpp Sources/StorageArea3.cpp
diffstat 3 files changed, 21 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/Sources/OnChangeCallback.cpp	Tue Apr 07 15:27:07 2026 +0200
+++ b/Sources/OnChangeCallback.cpp	Tue Apr 07 15:41:27 2026 +0200
@@ -91,8 +91,7 @@
   boost::condition_variable  elementAvailable_;
   boost::condition_variable  emptied_;
 
-public:
-  ~PendingChanges()
+  void ClearInternal()
   {
     for (Queue::iterator it = queue_.begin(); it != queue_.end(); ++it)
     {
@@ -100,6 +99,12 @@
       delete *it;
     }
   }
+
+public:
+  ~PendingChanges()
+  {
+    ClearInternal();
+  }
   
   void Enqueue(OrthancPluginChangeType changeType,
                OrthancPluginResourceType resourceType,
@@ -150,6 +155,12 @@
       emptied_.wait(lock);
     }
   }
+
+  void Clear()
+  {
+    boost::mutex::scoped_lock lock(mutex_);
+    ClearInternal();
+  }
 };
 
 
@@ -263,4 +274,6 @@
 {
   StopThread();
   ICallbackRegistration::Unregister(changesCallback_);
+
+  pendingChanges_.Clear();
 }
--- a/Sources/StorageArea.cpp	Tue Apr 07 15:27:07 2026 +0200
+++ b/Sources/StorageArea.cpp	Tue Apr 07 15:41:27 2026 +0200
@@ -238,15 +238,18 @@
   if (createCallback_ != NULL)
   {
     Py_XDECREF(createCallback_);
+    createCallback_ = NULL;
   }
   
   if (readCallback_ != NULL)
   {
     Py_XDECREF(readCallback_);
+    readCallback_ = NULL;
   }
   
   if (removeCallback_ != NULL)
   {
     Py_XDECREF(removeCallback_);
+    removeCallback_ = NULL;
   }
 }
--- a/Sources/StorageArea3.cpp	Tue Apr 07 15:27:07 2026 +0200
+++ b/Sources/StorageArea3.cpp	Tue Apr 07 15:41:27 2026 +0200
@@ -363,16 +363,19 @@
   if (createCallback2_ != NULL)
   {
     Py_XDECREF(createCallback2_);
+    createCallback2_ = NULL;
   }
   
   if (readCallback2_ != NULL)
   {
     Py_XDECREF(readCallback2_);
+    readCallback2_ = NULL;
   }
   
   if (removeCallback2_ != NULL)
   {
     Py_XDECREF(removeCallback2_);
+    removeCallback2_ = NULL;
   }
 }