Fix internal request callback 71/242571/2
authorSangyoon Jang <jeremy.jang@samsung.com>
Fri, 28 Aug 2020 04:04:12 +0000 (13:04 +0900)
committerSangyoon Jang <jeremy.jang@samsung.com>
Fri, 28 Aug 2020 06:27:18 +0000 (15:27 +0900)
When multi install the end signal received multiple times, so releasing
request info should be done after receiving all end signals.

Change-Id: I1651800cef717fbe7f660a842959af179dadf3c8
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
src/package_manager.c

index 4bc0799..c84cf5a 100644 (file)
@@ -62,6 +62,7 @@ struct package_manager_request_s {
        request_event_info *head;
        package_manager_request_event_cb event_cb;
        GHashTable *request_cb_table;
+       int n_paths;
        void *user_data;
 };
 
@@ -667,9 +668,13 @@ static int internal_request_callback(uid_t target_uid, int req_id, const char *p
                if (__find_event_info(&request->head, req_id, &event_type,
                                &event_state) == 0) {
                        if (request->request_cb_table) {
-                               _LOGD("remove item, req_id(%d)", req_id);
-                               g_hash_table_remove(request->request_cb_table,
-                                       GINT_TO_POINTER(req_id));
+                               request->n_paths--;
+                               if (request->n_paths < 1) {
+                                       _LOGD("remove item, req_id(%d)", req_id);
+                                       g_hash_table_remove(
+                                               request->request_cb_table,
+                                               GINT_TO_POINTER(req_id));
+                               }
                        }
                        if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
                                if (strcasecmp(val, "ok") == 0) {
@@ -751,6 +756,7 @@ static int __request_install_packages(package_manager_request_h request,
                return package_manager_error(
                                PACKAGE_MANAGER_ERROR_INVALID_PARAMETER,
                                __FUNCTION__, NULL);
+       request->n_paths = n_paths;
        int request_id = 0;
        request_id = pkgmgr_client_install_packages(request->pc, paths,
                        n_paths, event_cb ? event_cb : request_event_handler,
@@ -920,6 +926,7 @@ static int __request_mount_install_packages(package_manager_request_h request,
                return package_manager_error(
                                PACKAGE_MANAGER_ERROR_INVALID_PARAMETER,
                                __FUNCTION__, NULL);
+       request->n_paths = n_paths;
        int request_id = 0;
        request_id = pkgmgr_client_mount_install_packages(request->pc, paths,
                        n_paths, event_cb ? event_cb : request_event_handler,