Fix intermittent crash 95/49695/2 accepted/tizen/mobile/20151020.015547 accepted/tizen/tv/20151020.015619 accepted/tizen/wearable/20151020.015629 submit/tizen/20151019.070113
authorSangyoon Jang <s89.jang@samsung.com>
Mon, 19 Oct 2015 06:26:52 +0000 (15:26 +0900)
committerSangyoon Jang <s89.jang@samsung.com>
Mon, 19 Oct 2015 06:33:40 +0000 (15:33 +0900)
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 <s89.jang@samsung.com>
comm/comm_client_gdbus.c

index 5e4c164..71e467d 100644 (file)
@@ -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;
 }