Browse Source

HPCC-19003 ESDL unsubscribe causes assertex exception at shutdown

- Move the unsubscribe calls from the destructor of the subscription
  classes to the destructor of EsdlBindingImpl class.

Signed-off-by: mayx <yanrui.ma@lexisnexisrisk.com>
mayx 7 years ago
parent
commit
893abc1da1

+ 8 - 0
esp/services/esdl_svc_engine/esdl_binding.cpp

@@ -1147,6 +1147,14 @@ EsdlBindingImpl::EsdlBindingImpl(IPropertyTree* cfg, const char *binding,  const
     }
 }
 
+EsdlBindingImpl::~EsdlBindingImpl()
+{
+    if(m_pBindingSubscription != nullptr)
+        m_pBindingSubscription->unsubscribe();
+    if(m_pDefinitionSubscription != nullptr)
+        m_pDefinitionSubscription->unsubscribe();
+}
+
 void EsdlBindingImpl::saveDESDLState()
 {
     try

+ 1 - 4
esp/services/esdl_svc_engine/esdl_binding.hpp

@@ -210,7 +210,6 @@ private:
 
         virtual ~CESDLBindingSubscription()
         {
-            unsubscribe();
         }
 
         void unsubscribe()
@@ -263,7 +262,6 @@ private:
 
         virtual ~CESDLDefinitionSubscription()
         {
-            unsubscribe();
         }
 
         void unsubscribe()
@@ -325,8 +323,7 @@ public:
 
     EsdlBindingImpl();
     EsdlBindingImpl(IPropertyTree* cfg, const char *bindname=NULL, const char *procname=NULL);
-
-    virtual ~EsdlBindingImpl(){}
+    virtual ~EsdlBindingImpl();
 
     virtual int onGet(CHttpRequest* request, CHttpResponse* response);