Fix eldbus methods creating MessagePtr to deallocate Eldbus_Message 65/320765/1 accepted/tizen/8.0/unified/20241223.151523
authorJaehyun Cho <jae_hyun.cho@samsung.com>
Thu, 21 Nov 2024 06:25:02 +0000 (15:25 +0900)
committerJaehyun Cho <jae_hyun.cho@samsung.com>
Fri, 22 Nov 2024 05:36:41 +0000 (14:36 +0900)
When MessagePtr is created, Eldbus_Message is also created internally.
Therefore, when MessagePtr is destructed, the Eldbus_Message should be
deallocated as well to prevent memory leak.

So some methods creating MessagePtr are fixed to call
eldbus_message_unref for Eldbus_Message when MessagePtr is destructed.

To avoid double deallocation by calling eldbus_message_unref twice,
eldbus_connection_send_impl is fixed to release its MessagePtr argument.

Change-Id: I7f21a0f62ca54d1838e0742cad6331d4668e0aba

dali/internal/accessibility/bridge/dbus/dbus-tizen.cpp

index baab45a7cdcc89d35f52afbe4d64c6238336b1f2..3418d6648ba385620c652285396b07a606f2660c 100755 (executable)
@@ -389,12 +389,12 @@ struct DefaultDBusWrapper : public DBusWrapper
 
   MessagePtr eldbus_proxy_method_call_new_impl(const ProxyPtr& proxy, const std::string& funcName)
   {
-    return create(eldbus_proxy_method_call_new(get(proxy), funcName.c_str()));
+    return create(eldbus_proxy_method_call_new(get(proxy), funcName.c_str()), true);
   }
 
   MessagePtr eldbus_proxy_send_and_block_impl(const ProxyPtr& proxy, const MessagePtr& msg) override
   {
-    return create(eldbus_proxy_send_and_block(get(proxy), release(msg), ELDBUS_CALL_TIMEOUT));
+    return create(eldbus_proxy_send_and_block(get(proxy), release(msg), ELDBUS_CALL_TIMEOUT), true);
   }
 
   bool eldbus_message_error_get_impl(const MessagePtr& msg, std::string& name, std::string& text) override
@@ -482,22 +482,22 @@ struct DefaultDBusWrapper : public DBusWrapper
 
   MessagePtr eldbus_message_method_return_new_impl(const MessagePtr& msg) override
   {
-    return create(eldbus_message_method_return_new(get(msg)));
+    return create(eldbus_message_method_return_new(get(msg)), true);
   }
 
   MessagePtr eldbus_message_error_new_impl(const MessagePtr& msg, const std::string& err, const std::string& txt) override
   {
-    return create(eldbus_message_error_new(get(msg), err.c_str(), txt.c_str()));
+    return create(eldbus_message_error_new(get(msg), err.c_str(), txt.c_str()), true);
   }
 
   PendingPtr eldbus_connection_send_impl(const ConnectionPtr& conn, const MessagePtr& msg) override
   {
-    return create(eldbus_connection_send(get(conn), get(msg), NULL, NULL, -1));
+    return create(eldbus_connection_send(get(conn), release(msg), NULL, NULL, -1));
   }
 
   MessagePtr eldbus_message_signal_new_impl(const std::string& path, const std::string& iface, const std::string& name) override
   {
-    return create(eldbus_message_signal_new(path.c_str(), iface.c_str(), name.c_str()));
+    return create(eldbus_message_signal_new(path.c_str(), iface.c_str(), name.c_str()), true);
   }
 
   MessagePtr eldbus_message_ref_impl(const MessagePtr& msg) override