aboutsummaryrefslogtreecommitdiffstats
path: root/signal-composer-binding/signal-composer.cpp
diff options
context:
space:
mode:
authorRomain Forlot <romain.forlot@iot.bzh>2017-12-08 20:10:48 +0100
committerRomain Forlot <romain.forlot@iot.bzh>2017-12-14 11:00:49 +0100
commitc4b36f01f3286a1c7f183323df00b36270c8498b (patch)
tree93bcc0c3956d161c80067cf5903f43c53be252a1 /signal-composer-binding/signal-composer.cpp
parente599b4ba129df475a9c8bb8290c3803f9dda664a (diff)
Fix memory leaks relative to json_object
Change-Id: I0cff16c1d44b9363522fde7c6c9b2bd10ba376ac Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
Diffstat (limited to 'signal-composer-binding/signal-composer.cpp')
-rw-r--r--signal-composer-binding/signal-composer.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/signal-composer-binding/signal-composer.cpp b/signal-composer-binding/signal-composer.cpp
index 8461748..4a0346c 100644
--- a/signal-composer-binding/signal-composer.cpp
+++ b/signal-composer-binding/signal-composer.cpp
@@ -89,6 +89,12 @@ Composer::Composer()
Composer::~Composer()
{
+ for(auto& j: ctlActionsJ_)
+ {
+ json_object_put(j);
+ }
+ json_object_put(ctlConfig_->configJ);
+ json_object_put(ctlConfig_->requireJ);
free(ctlConfig_);
}
@@ -174,7 +180,7 @@ json_object* Composer::buildLuaAction(std::string name, std::string function, js
CtlActionT* Composer::convert2Action(const std::string& name, json_object* actionJ)
{
json_object *functionArgsJ = nullptr,
- *ctlActionJ = nullptr;
+ *ctlActionJ = nullptr;
char *function;
const char *plugin;
CtlActionT *ctlAction = new CtlActionT;
@@ -219,10 +225,13 @@ CtlActionT* Composer::convert2Action(const std::string& name, json_object* actio
}
}
+ // Register json object for later release
+ ctlActionsJ_.push_back(ctlActionJ);
if(ctlActionJ)
{
- if(!ActionLoadOne(nullptr, ctlAction, ctlActionJ, 0))
- return ctlAction;
+ int err = ActionLoadOne(nullptr, ctlAction, ctlActionJ, 0);
+ if(! err)
+ {return ctlAction;}
}
return nullptr;
@@ -306,6 +315,8 @@ int Composer::loadOneSourceAPI(json_object* sourceJ)
{
std::string function = "api://" + std::string(api) + "/subscribe";
getSignalsJ = buildApiAction("getSignals", function, nullptr);
+ // Register json object for later release
+ ctlActionsJ_.push_back(getSignalsJ);
}
getSignalsCtl = convert2Action("getSignals", getSignalsJ);