Fix memory leak 80/312880/1
authorSangyoon Jang <jeremy.jang@samsung.com>
Mon, 17 Jun 2024 01:58:33 +0000 (10:58 +0900)
committerSangyoon Jang <jeremy.jang@samsung.com>
Mon, 17 Jun 2024 05:38:07 +0000 (14:38 +0900)
Change-Id: I2decc94642ac153795366181e7cd849f05b755f2
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
src/theme/dbus/request_broker.cc
test/unit_tests/mock/gio_mock.cc
test/unit_tests/mock/gio_mock.h

index ca43f7e1ebd8c0fa55035a282912fd23794d25ab..49ea7517347a8cc4e33dd94b6ed2607f98410c78 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <string>
 #include <utility>
+#include <memory>
 
 #include "theme/dbus/request_broker.h"
 #include "theme/utils/logging.h"
@@ -223,6 +224,8 @@ tizen_base::Bundle RequestBroker::SendData(Command cmd,
     LOG(ERROR) << "Can't allocate new method call";
     return ErrorResultBundle();
   }
+  std::unique_ptr<GDBusMessage, decltype(g_object_unref)*> msg_auto(
+      msg, g_object_unref);
   g_dbus_message_set_body(msg,
       g_variant_new("(is)",
         static_cast<int>(cmd),
@@ -239,6 +242,8 @@ tizen_base::Bundle RequestBroker::SendData(Command cmd,
     }
     return ErrorResultBundle();
   }
+  std::unique_ptr<GDBusMessage, decltype(g_object_unref)*> reply_auto(
+      reply, g_object_unref);
 
   GDBusMessageType type = g_dbus_message_get_message_type(reply);
   if (type != G_DBUS_MESSAGE_TYPE_METHOD_RETURN) {
@@ -274,6 +279,8 @@ void RequestBroker::SendDataAsync(Command cmd, tizen_base::Bundle& data) {
     LOG(ERROR) << "Can't allocate new method call";
     return;
   }
+  std::unique_ptr<GDBusMessage, decltype(g_object_unref)*> msg_auto(
+      msg, g_object_unref);
 
   g_dbus_message_set_body(msg, g_variant_new("(is)", static_cast<int>(cmd),
           reinterpret_cast<char*>(data.ToRaw().first.get())));
index 0879f4b2db48aa6eaac36e5ee8843b57597e1faf..5dd8a26f68af1539a405761ba6a2fdfc414bb2c1 100644 (file)
@@ -106,3 +106,7 @@ extern "C" GDBusMessageType g_dbus_message_get_message_type(
 extern "C" int g_dbus_message_to_gerror(GDBusMessage* arg0, GError** arg1) {
   return MOCK_HOOK_P2(GioMock, g_dbus_message_to_gerror, arg0, arg1);
 }
+
+extern "C" void g_object_unref(gpointer arg0) {
+  return MOCK_HOOK_P1(GioMock, g_object_unref, arg0);
+}
index 42b490e53846308df65a73e71f7b3e3785e7ffbe..8547e29fe9e9e229d33163c5328835b5c5b07aa9 100755 (executable)
@@ -68,6 +68,8 @@ class GioMock : public virtual ModuleMock {
 
   MOCK_METHOD2(g_dbus_message_to_gerror,
       gboolean(GDBusMessage*, GError**));
+
+  MOCK_METHOD1(g_object_unref, void (gpointer));
 };
 
 #endif  // TEST_UNIT_TESTS_MOCK_GIO_MOCK_H_