Explorar el Código

Merge branch 'candidate-5.4.4'

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman hace 9 años
padre
commit
5ed5b4ee5b
Se han modificado 1 ficheros con 6 adiciones y 0 borrados
  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());
 }