Sfoglia il codice sorgente

Merge branch 'service-tracker-tests'

* service-tracker-tests:
  More recursive mutex lock fixes.
Sascha Zelzer 13 anni fa
parent
commit
0b1e3a6f2f

+ 9 - 2
Libs/PluginFramework/ctkPluginFrameworkListeners.cpp

@@ -56,7 +56,7 @@ void ctkPluginFrameworkListeners::addServiceSlot(
   ctkServiceSlotEntry sse(plugin, receiver, slot, filter);
   if (serviceSet.contains(sse))
   {
-    removeServiceSlot(plugin, receiver, slot);
+    removeServiceSlot_unlocked(plugin, receiver, slot);
   }
   serviceSet.insert(sse);
   checkSimple(sse);
@@ -69,8 +69,15 @@ void ctkPluginFrameworkListeners::removeServiceSlot(QSharedPointer<ctkPlugin> pl
                                                     QObject* receiver,
                                                     const char* slot)
 {
-  QMutexLocker lock(&mutex); Q_UNUSED(lock)
+  QMutexLocker lock(&mutex);
+  removeServiceSlot_unlocked(plugin, receiver, slot);
+}
 
+//----------------------------------------------------------------------------
+void ctkPluginFrameworkListeners::removeServiceSlot_unlocked(QSharedPointer<ctkPlugin> plugin,
+                                                             QObject* receiver,
+                                                             const char* slot)
+{
   ctkServiceSlotEntry entryToRemove(plugin, receiver, slot);
   QMutableSetIterator<ctkServiceSlotEntry> it(serviceSet);
   while (it.hasNext())

+ 6 - 0
Libs/PluginFramework/ctkPluginFrameworkListeners_p.h

@@ -144,6 +144,12 @@ private:
    * Add all members of the specified list to the specified set.
    */
   void addToSet(QSet<ctkServiceSlotEntry>& set, int cache_ix, const QString& val);
+
+  /**
+   * The unsynchronized version of removeServiceSlot().
+   */
+  void removeServiceSlot_unlocked(QSharedPointer<ctkPlugin> plugin, QObject* receiver,
+                                  const char* slot);
 };