Fixed ua-client cleanup on app termination
authorAtul Rai <a.rai@samsung.com>
Mon, 11 Mar 2019 10:51:21 +0000 (16:21 +0530)
committer김새롬/Tizen Platform Lab(SR)/Staff Engineer/삼성전자 <saerome.kim@samsung.com>
Tue, 12 Mar 2019 11:51:22 +0000 (20:51 +0900)
Signed-off-by: Atul Rai <a.rai@samsung.com>
ua-api/src/ua-api.c
ua-daemon/src/ua-manager-request-handler.c

index ea21c06..d24fa07 100644 (file)
@@ -35,6 +35,7 @@ UAM_EXPORT_API int _uam_init(uam_event_callback cb, void *user_data)
 
        ret = _uam_sync_enable(TRUE);
        if (UAM_ERROR_NONE != ret) {
+               UAM_ERR("_uam_sync_enable(TRUE) failed");
                return ret;
        }
 
index 252248c..f7e1860 100644 (file)
@@ -751,7 +751,6 @@ static int __uam_manager_unregister_object(GDBusConnection *conn)
 
 static void __uam_manager_cleanup_requests_from_sender(const char *name)
 {
-//     FUNC_ENTRY;
        GSList *l;
 
        ret_if(NULL == name);
@@ -771,7 +770,6 @@ static void __uam_manager_cleanup_requests_from_sender(const char *name)
 
        /* App terminated, cleanup monitor list */
        _uam_core_cleanup_monitor((char *)name);
-//     FUNC_EXIT;
 }
 
 static void __uam_manager_name_owner_changed_cb(GDBusConnection *connection,
@@ -782,26 +780,34 @@ static void __uam_manager_name_owner_changed_cb(GDBusConnection *connection,
                GVariant *parameters,
                gpointer user_data)
 {
-       int count = 0;
+       int count = 1;
        const char *name = NULL;
        const char *old_owner = NULL;
        const char *new_owner = NULL;
+       GSList *list;
 
        g_variant_get(parameters, "(&s&s&s)", &name, &old_owner, &new_owner);
 
        if ('\0' == *new_owner) {
+               /* Cleanup all pending request from this sender */
+               __uam_manager_cleanup_requests_from_sender(name);
+
                g_mutex_lock(&uam_dbus_clients_mutex);
-               count = g_slist_length(uam_dbus_clients);
+               list = __uam_list_find_client(name);
+               if (list) {
+                       /* found bus name in our bus list */
+                       __uamd_dbus_client_cleanup((gpointer)list->data);
+                       uam_dbus_clients = g_slist_remove_link(uam_dbus_clients, list);
+                       count = g_slist_length(uam_dbus_clients);
+               }
                g_mutex_unlock(&uam_dbus_clients_mutex);
-               if (0 == count) {
-                       /* Cleanup all pending request from this sender */
-                       __uam_manager_cleanup_requests_from_sender(name);
 
+               if (0 == count) {
                        UAM_ERR("Quit ua-manager");
                        g_main_loop_quit(main_loop);
                }
-
-       }}
+       }
+}
 
 static void __uam_manager_name_acquired_cb(
                GDBusConnection *connection, const gchar *name, gpointer user_data)