Sfoglia il codice sorgente

Merge branch 'candidate-5.4.4'

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 9 anni fa
parent
commit
5ed5b4ee5b
1 ha cambiato i file con 6 aggiunte e 0 eliminazioni
  1. 6 0
      dali/base/dasds.cpp

+ 6 - 0
dali/base/dasds.cpp

@@ -8164,6 +8164,12 @@ void CCovenSDSManager::handleNotify(CSubscriberContainerBase *_subscriber, Memor
             _notifier.setown(new CSubscriberNotifier(subscriberNotificationTable, *subscriber, notifyData));
             subscriberNotificationTable.replace(*_notifier);
         }
+        /* Must clear before leaving ntyTableCrit, so that notifier thread owns and destroys the
+         * CSubscriberContainerBase object. It cannot be destroyed here, because this method may have been
+         * called inside the SDS lock during a node delete and do not want to call into subscriber manager
+         * as that can deadlock, if processing a request already that requires SDS lock.
+         */
+        subscriber.clear();
     }
     notifyPool->start(_notifier.get());
 }