Fix internal request callback
[platform/core/api/package-manager.git] / 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,