Remove event after using to prevent leak
[platform/core/appfw/data-provider-master.git] / src / service_common.cc
index 4983cce..795c1de 100644 (file)
@@ -98,17 +98,32 @@ void PackageEventListener::OnPkgmgrEvent(std::shared_ptr<PkgmgrEventArgs> args)
   }
 
   if (args->GetEventName().compare(std::string("ok")) == 0) {
-    for (auto& a : pkgmgr_event_list_) {
-      if (a->GetTargetUid() == args->GetTargetUid() &&
-          a->GetPkgId().compare(args->GetPkgId()) == 0) {
-        if (a->GetEventName().compare(std::string("install")) == 0)
+    auto iter = pkgmgr_event_list_.begin();
+    while(iter != pkgmgr_event_list_.end()) {
+      if ((*iter)->GetTargetUid() == args->GetTargetUid() &&
+          (*iter)->GetPkgId().compare(args->GetPkgId()) == 0) {
+        if ((*iter)->GetEventName().compare(std::string("install")) == 0)
           _package_install_cb(args->GetTargetUid(), args->GetPkgId().c_str());
-        else if (a->GetEventName().compare(std::string("uninstall")) == 0)
+        else if ((*iter)->GetEventName().compare(std::string("uninstall")) == 0)
           _package_uninstall_cb(args->GetTargetUid(), args->GetPkgId().c_str());
-        else if (a->GetEventName().compare(std::string("enable_app")) == 0)
+        else if ((*iter)->GetEventName().compare(std::string("enable_app")) == 0)
           _app_enabled_cb(args->GetTargetUid(), args->GetPkgId().c_str());
-        else if (a->GetEventName().compare(std::string("disable_app")) == 0)
+        else if ((*iter)->GetEventName().compare(std::string("disable_app")) == 0)
           _app_disabled_cb(args->GetTargetUid(), args->GetPkgId().c_str());
+
+        iter = pkgmgr_event_list_.erase(iter);
+      } else {
+        iter++;
+      }
+    }
+  } else if (args->GetEventName().compare(std::string("fail")) == 0) {
+    auto iter = pkgmgr_event_list_.begin();
+    while(iter != pkgmgr_event_list_.end()) {
+      if ((*iter)->GetTargetUid() == args->GetTargetUid() &&
+          (*iter)->GetPkgId().compare(args->GetPkgId()) == 0) {
+        iter = pkgmgr_event_list_.erase(iter);
+      } else {
+        iter++;
       }
     }
   }
@@ -127,17 +142,32 @@ void PackageEventListener::OnPkgmgrAppEvent(std::shared_ptr<PkgmgrAppEventArgs>
   }
 
   if (args->GetEventName().compare(std::string("ok")) == 0) {
-    for (auto& a : pkgmgr_app_event_list_) {
-      if (a->GetTargetUid() == args->GetTargetUid() &&
-          a->GetPkgId().compare(args->GetPkgId()) == 0) {
-        if (a->GetEventName().compare(std::string("install")) == 0)
+    auto iter = pkgmgr_app_event_list_.begin();
+    while(iter != pkgmgr_app_event_list_.end()) {
+      if ((*iter)->GetTargetUid() == args->GetTargetUid() &&
+          (*iter)->GetPkgId().compare(args->GetPkgId()) == 0) {
+        if ((*iter)->GetEventName().compare(std::string("install")) == 0)
           _package_install_cb(args->GetTargetUid(), args->GetPkgId().c_str());
-        else if (a->GetEventName().compare(std::string("uninstall")) == 0)
+        else if ((*iter)->GetEventName().compare(std::string("uninstall")) == 0)
           _package_uninstall_cb(args->GetTargetUid(), args->GetPkgId().c_str());
-        else if (a->GetEventName().compare(std::string("enable_app")) == 0)
+        else if ((*iter)->GetEventName().compare(std::string("enable_app")) == 0)
           _app_enabled_cb(args->GetTargetUid(), args->GetPkgId().c_str());
-        else if (a->GetEventName().compare(std::string("disable_app")) == 0)
+        else if ((*iter)->GetEventName().compare(std::string("disable_app")) == 0)
           _app_disabled_cb(args->GetTargetUid(), args->GetPkgId().c_str());
+
+        iter = pkgmgr_app_event_list_.erase(iter);
+      } else {
+        iter++;
+      }
+    }
+  } else if (args->GetEventName().compare(std::string("fail")) == 0) {
+    auto iter = pkgmgr_app_event_list_.begin();
+    while(iter != pkgmgr_app_event_list_.end()) {
+      if ((*iter)->GetTargetUid() == args->GetTargetUid() &&
+          (*iter)->GetPkgId().compare(args->GetPkgId()) == 0) {
+        iter = pkgmgr_app_event_list_.erase(iter);
+      } else {
+        iter++;
       }
     }
   }