Fix memory leak in ATSPI event callback. 22/309622/1
authorWonsik Jung <sidein@samsung.com>
Wed, 3 Apr 2024 08:29:33 +0000 (17:29 +0900)
committerWonsik Jung <sidein@samsung.com>
Sat, 13 Apr 2024 06:09:52 +0000 (15:09 +0900)
Fix Memory leak in ATSPI event callback.
The memory leak is related to application instance.

Change-Id: I8ac3106ef409ad0691cf78d4d45f42f232d45d26

libaurum/src/Impl/Accessibility/AtspiAccessibleWatcher.cc

index d0b66ba..3c3c1a9 100644 (file)
@@ -212,6 +212,7 @@ void AtspiAccessibleWatcher::appendApp(AtspiAccessibleWatcher *instance, AtspiAc
             mAppCount++;
             instance->mXMLDocMap.insert({{package, pid},
                     std::make_shared<AurumXML>(std::make_shared<AtspiAccessibleNode>(app), &mAppXMLLoadedCount, &mXMLMutex, &mXMLConditionVar)});
+            g_object_ref(app);
         }
     }
 }
@@ -228,8 +229,6 @@ void AtspiAccessibleWatcher::removeApp(AtspiAccessibleWatcher *instance, AtspiAc
             instance->mXMLDocMap.erase({package, pid});
         }
     }
-
-    g_object_unref(app);
 }
 
 gpointer AtspiAccessibleWatcher::timerThread(gpointer data)
@@ -356,6 +355,11 @@ void AtspiAccessibleWatcher::onAtspiEvents(AtspiEvent *event, void *watcher)
     else
         pkg = strdup("");
 
+    if(app)
+    {
+        g_object_unref(app);
+    }
+
     instance->processCallback(event->type, name, pkg);
 
     if (!strcmp(event->type, "object:state-changed:defunct")) {