client: Remove cloned services if the proxy is removed
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Tue, 12 Feb 2019 11:38:46 +0000 (13:38 +0200)
committerhimanshu <h.himanshu@samsung.com>
Tue, 11 Feb 2020 08:57:47 +0000 (14:27 +0530)
This unregister the cloned services if the proxy is removed since they
would no longer be accessible.

Change-Id: I657787c1f534cc2493e77a61f3f062dca20494ec
Signed-off-by: himanshu <h.himanshu@samsung.com>
client/gatt.c

index f3524ed..afe8e2e 100755 (executable)
@@ -201,8 +201,25 @@ void gatt_add_service(GDBusProxy *proxy)
        print_service_proxy(proxy, COLORED_NEW);
 }
 
+static struct service *remove_service_by_proxy(struct GDBusProxy *proxy)
+{
+       GList *l;
+
+       for (l = local_services; l; l = g_list_next(l)) {
+               struct service *service = l->data;
+
+               if (service->proxy == proxy) {
+                       local_services = g_list_delete_link(local_services, l);
+                       return service;
+               }
+       }
+
+       return NULL;
+}
+
 void gatt_remove_service(GDBusProxy *proxy)
 {
+       struct service *service;
        GList *l;
 
        l = g_list_find(services, proxy);
@@ -212,6 +229,11 @@ void gatt_remove_service(GDBusProxy *proxy)
        services = g_list_delete_link(services, l);
 
        print_service_proxy(proxy, COLORED_DEL);
+
+       service = remove_service_by_proxy(proxy);
+       if (service)
+               g_dbus_unregister_interface(service->conn, service->path,
+                                               SERVICE_INTERFACE);
 }
 
 static void print_chrc(struct chrc *chrc, const char *description)