Bluetooth-Service: ref objects after unref them 87/18387/1
authorWu Jiangbo <jiangbox.wu@intel.com>
Thu, 20 Mar 2014 08:36:55 +0000 (16:36 +0800)
committerWu Jiangbo <jiangbox.wu@intel.com>
Thu, 20 Mar 2014 10:46:55 +0000 (18:46 +0800)
Change-Id: I7ee124e5e2b27a8a9a655a84e79bd59bdce6bc13
Signed-off-by: Wu Jiangbo <jiangbox.wu@intel.com>
lib/bluetooth-service.c

index 7361536..b07c447 100644 (file)
@@ -106,7 +106,7 @@ static struct _comms_object *create_object(GDBusObject *obj)
        if (properties_proxy == NULL)
                WARN("create properties proxy error");
 
-       object->properties_proxy = properties_proxy;
+       object->properties_proxy = g_object_ref(properties_proxy);
        object->path_name = g_strdup(path);
 
        return object;
@@ -363,8 +363,8 @@ static void parse_comms_bluetooth(gpointer data, gpointer user_data)
                return;
 
        proxy_node->interface_name = iface_name;
-       proxy_node->interface = interface;
-       proxy_node->proxy = proxy;
+       proxy_node->interface = g_object_ref(interface);
+       proxy_node->proxy = g_object_ref(proxy);
 }
 
 static void comms_service_bluetooth_added(struct _comms_object *object,
@@ -399,8 +399,8 @@ static void parse_comms_manager(gpointer data, gpointer user_data)
        if (g_strcmp0(iface_name, COMMS_MANAGER_INTERFACE))
                return;
 
-       manager->interface = interface;
-       manager->proxy = proxy;
+       manager->interface = g_object_ref(interface);
+       manager->proxy = g_object_ref(proxy);
 
        g_signal_connect(proxy, "g-properties-changed",
                        G_CALLBACK(manager_properties_changed), NULL);
@@ -485,8 +485,6 @@ static void parse_object(gpointer data, gpointer user_data)
                WARN("Unkonw object type");
                return;
        }
-
-       g_object_unref(object);
 }
 
 static void object_added(GDBusObjectManager *manger, GDBusObject *object,
@@ -516,6 +514,7 @@ static void object_removed(GDBusObjectManager *manger, GDBusObject *object,
 
 int comms_lib_init(void)
 {
+       GDBusObjectManager *manager;
        GList *obj_list;
 
        DBG("");
@@ -523,18 +522,20 @@ int comms_lib_init(void)
        if (object_manager != NULL)
                return 0;
 
-       object_manager = g_dbus_object_manager_client_new_for_bus_sync(
+       manager = g_dbus_object_manager_client_new_for_bus_sync(
                                                        G_BUS_TYPE_SYSTEM,
                                                        0, COMMS_SERVICE_NAME,
                                                        OBJECT_MANAGER_OBJ_PATH,
                                                        NULL, NULL, NULL,
                                                        NULL, NULL);
-       if (object_manager == NULL) {
+       if (manager == NULL) {
                ERROR("create object manager error");
                /* TODO: define error type */
                return -1;
        }
 
+       object_manager = g_object_ref(manager);
+
        g_signal_connect(object_manager, "object-added",
                                G_CALLBACK(object_added), NULL);
        g_signal_connect(object_manager, "object-removed",
@@ -547,6 +548,8 @@ int comms_lib_init(void)
 
        g_list_foreach(obj_list, parse_object, NULL);
 
+       g_list_free(obj_list);
+
        return 0;
 }