diff --git a/ioc/groupsrcsubscriptionctx.h b/ioc/groupsrcsubscriptionctx.h index e120d2f..36fd87a 100644 --- a/ioc/groupsrcsubscriptionctx.h +++ b/ioc/groupsrcsubscriptionctx.h @@ -37,6 +37,7 @@ public: // This is so that we can merge this with the subsequent values that come in before all initial events are in Value currentValue; + // must db_cancel_event() before ~MonitorControlOp std::vector fieldSubscriptionContexts{}; explicit GroupSourceSubscriptionCtx(Group& subscribedGroup) :group(subscribedGroup), currentValue(subscribedGroup.valueTemplate.cloneEmpty()) { diff --git a/ioc/singlesrcsubscriptionctx.h b/ioc/singlesrcsubscriptionctx.h index fc7954f..528d658 100644 --- a/ioc/singlesrcsubscriptionctx.h +++ b/ioc/singlesrcsubscriptionctx.h @@ -51,6 +51,8 @@ public: ~SingleSourceSubscriptionCtx() { assert(!eventsEnabled); + // must db_cancel_event() before ~MonitorControlOp + cancel(); } }; diff --git a/ioc/subscriptionctx.h b/ioc/subscriptionctx.h index 05e8f84..db99c5e 100644 --- a/ioc/subscriptionctx.h +++ b/ioc/subscriptionctx.h @@ -45,6 +45,9 @@ public: if(!sub) throw std::runtime_error("Failed to create db subscription"); } + void cancel() { + sub.reset(); + } void enable() { if(sub) { db_event_enable(sub.get()); @@ -67,6 +70,10 @@ public: Subscription pPropertiesEventSubscription; bool hadValueEvent = false; bool hadPropertyEvent = false; + void cancel() { + pValueEventSubscription.cancel(); + pPropertiesEventSubscription.cancel(); + } }; } // ioc