From 1b11563c863b6c93c31bcc0a5d807f5725c1d1b0 Mon Sep 17 00:00:00 2001 From: Sangyoon Jang Date: Mon, 19 Oct 2015 15:26:52 +0900 Subject: [PATCH] Fix intermittent crash when fails on g_dbus_proxy_call_sync, the g_variant passed is released automatically because it uses floating reference count. so we should convert the g_variant to using normal reference count and handle reference count manually. Change-Id: I46b41c0d3f89eca3122a293a47e393b455c973e6 Signed-off-by: Sangyoon Jang --- comm/comm_client_gdbus.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/comm/comm_client_gdbus.c b/comm/comm_client_gdbus.c index 5e4c164..71e467d 100644 --- a/comm/comm_client_gdbus.c +++ b/comm/comm_client_gdbus.c @@ -226,6 +226,9 @@ GVariant *comm_client_request(comm_client *cc, const char *method, GVariant *par GVariant *result = NULL; int retry_cnt = 0; + /* convert floating ref into normal ref */ + g_variant_ref_sink(params); + do { proxy = g_dbus_proxy_new_sync(cc->conn, G_DBUS_PROXY_FLAGS_NONE, NULL, COMM_PKGMGR_DBUS_SERVICE, COMM_PKGMGR_DBUS_OBJECT_PATH, @@ -252,6 +255,9 @@ GVariant *comm_client_request(comm_client *cc, const char *method, GVariant *par retry_cnt++; } while (retry_cnt <= COMM_CLIENT_RETRY_MAX); + /* decrease ref count to 0 to free resource */ + g_variant_unref(params); + return result; } -- 2.34.1