Fix memory leaks in OnDemandJob & ActionState 47/142647/2
authorMu-Woong Lee <muwoong.lee@samsung.com>
Mon, 7 Aug 2017 02:30:32 +0000 (11:30 +0900)
committerMu-Woong Lee <muwoong.lee@samsung.com>
Mon, 7 Aug 2017 02:35:33 +0000 (02:35 +0000)
- OnDemandJob::~OnDemandJob() deletes its JobTrigger objects.
- ActionState::__callDBusMethod() frees the GVariant parameter object.

Change-Id: I778199214222dfceb250226c2896155d36d451bf
Signed-off-by: Mu-Woong Lee <muwoong.lee@samsung.com>
src/server/state/ActionState.cpp
src/shared/JobAction.h
src/shared/JobInfo.cpp

index a0e757ed91398db3e9aa9de9327e57588cafd113..fd6b30be81145da513cf41dfc87c2d006348aa5a 100644 (file)
@@ -93,8 +93,12 @@ void ActionState::__callDBusMethod()
 
        _D("Call %s.%s", action->getInterface().c_str(), action->getMethodName().c_str());
 
+       GVariant* param = action->getParameters();
        GVariant* result = caller.call(action->getBusName(), action->getObjectPath(),
-                       action->getInterface(), action->getMethodName(), action->getParameters());
+                       action->getInterface(), action->getMethodName(), param);
+
+       if (param)
+               g_variant_unref(param);
 
        if (!result) {
                _E("DBus call failed");
index 45c0f1bbcc159283ff869ea237e2c01e77099393..c96ff28296119ab7b24c8bbd43bf3d90b7f7b78c 100644 (file)
@@ -61,7 +61,7 @@ namespace ctx {
                const std::string& getObjectPath() const;
                const std::string& getInterface() const;
                const std::string& getMethodName() const;
-               GVariant* getParameters();
+               GVariant* getParameters();      // This returns a non-floating GVariant.
 
                void toJson(Json::Value& jsonNode) const;
 
index 430148f6d3c7ba21876e8174c293528860d502ed..52936a704c418c2b04bf7914533dcfd6a7d118ae 100644 (file)
@@ -331,9 +331,6 @@ void PeriodicJobInfo::__toJson(Json::Value& jsonRoot) const
 
 OnDemandJobInfo::OnDemandJobInfo()
 {
-       for (auto& trig : __triggers) {
-               delete trig;
-       }
 }
 
 OnDemandJobInfo::OnDemandJobInfo(Json::Value& jsonRoot, const std::string& serializedStr) :
@@ -354,6 +351,9 @@ JobInfo::Type OnDemandJobInfo::getType() const
 
 OnDemandJobInfo::~OnDemandJobInfo()
 {
+       for (auto& trig : __triggers) {
+               delete trig;
+       }
 }
 
 std::list<JobTrigger*>& OnDemandJobInfo::getTriggers()