diff options
author | Romain Forlot <romain.forlot@iot.bzh> | 2017-12-21 13:49:34 +0100 |
---|---|---|
committer | Romain Forlot <romain.forlot@iot.bzh> | 2017-12-21 13:52:40 +0100 |
commit | ecba1bf8a0ba238af78fa24a46c66d90905f8d0d (patch) | |
tree | 0152920bf597506240fbb62f77d77d6f71496f95 /signal-composer-binding | |
parent | 6ba79ffb113863d8df294729b16db4f4622fe283 (diff) |
Don't segfault at exit pointed to freed objects
Change-Id: Ic2f8ebee552ce982f858fe6ee93db2508a290617
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
Diffstat (limited to 'signal-composer-binding')
-rw-r--r-- | signal-composer-binding/signal-composer.cpp | 9 | ||||
-rw-r--r-- | signal-composer-binding/signal.cpp | 5 |
2 files changed, 8 insertions, 6 deletions
diff --git a/signal-composer-binding/signal-composer.cpp b/signal-composer-binding/signal-composer.cpp index fa565cb..9fc7109 100644 --- a/signal-composer-binding/signal-composer.cpp +++ b/signal-composer-binding/signal-composer.cpp @@ -89,9 +89,11 @@ Composer::Composer() Composer::~Composer() { + // This will free onReceived_ action member from signal objects + // Not the best to have it occurs here instead of in Signal destructor for(auto& j: ctlActionsJ_) { - json_object_put(j); + if(j) json_object_put(j); } if (ctlConfig_->configJ) json_object_put(ctlConfig_->configJ); if (ctlConfig_->requireJ)json_object_put(ctlConfig_->requireJ); @@ -543,8 +545,9 @@ void Composer::processOptions(const std::map<std::string, int>& opts, std::share Composer& Composer::instance() { - static Composer composer; - return composer; + static Composer* composer; + if(!composer) composer = new Composer(); + return *composer; } void* Composer::createContext(void* ctx) diff --git a/signal-composer-binding/signal.cpp b/signal-composer-binding/signal.cpp index dcbf814..84be8a7 100644 --- a/signal-composer-binding/signal.cpp +++ b/signal-composer-binding/signal.cpp @@ -75,9 +75,8 @@ Signal::Signal(const std::string& id, Signal::~Signal() { - json_object_put(onReceived_->argsJ); - json_object_put(getSignalsArgs_); - delete(onReceived_); + if(getSignalsArgs_) json_object_put(getSignalsArgs_); + if(onReceived_) delete(onReceived_); } Signal::operator bool() const |