Fix resource leak : 23614
[platform/core/connectivity/zigbee-manager.git] / zigbee-daemon / zigbee-lib / src / zblib_service.c
index f512514..2bfb853 100644 (file)
@@ -266,6 +266,22 @@ static void __zblib_service_remove_request_table_iter(gpointer key,
        zblib_request_free(service_interface, request_id);
 }
 
+static void __zblib_service_remove_async_list(GSList *list_async)
+{
+       GSList *iter = NULL;
+       if (0 < g_slist_length(list_async)) {
+               iter = g_slist_nth(list_async, 0);
+               while (iter) {
+                       if (iter) {
+                               struct _zblib_async_init_info *async_plugin =
+                                       (struct _zblib_async_init_info *)(list_async->data);
+                               list_async = g_slist_remove(list_async, async_plugin);
+                       }
+                       iter = g_slist_nth(list_async, 0);
+               }
+       }
+}
+
 ZigBeeService *zblib_service_new()
 {
        ZigBeeService *service;
@@ -473,6 +489,7 @@ gboolean zblib_service_initialize_plugins(ZigBeeService *service)
 
                                list_async = g_slist_append(list_async, info);
                        } else {
+                               __zblib_service_remove_async_list(list_async);
                                Z_LOGE("Fatal : Failed to initialize plugin");
                                return FALSE;
                        }
@@ -517,10 +534,15 @@ gboolean zblib_service_initialize_async_plugins(ZigBeeService *service)
 
 gboolean zblib_service_unload_plugins(ZigBeeService *service)
 {
-       GSList *list;
+       GSList *list = NULL;
+       GSList *list_async = NULL;
 
        zblib_check_null_ret_error("service", service, FALSE);
 
+       /* Unload everyy async_plugin */
+       list_async = __zblib_service_ref_async_initializer(service);
+       __zblib_service_remove_async_list(list_async);
+
        list = zblib_service_ref_plugins(service);
        while (list != NULL) {
                ZigBeePlugin *plugin = list->data;