From 65c72a311216a705a60a5f294dc680f782452cb5 Mon Sep 17 00:00:00 2001 From: Sangyoon Jang Date: Fri, 28 Aug 2020 13:04:12 +0900 Subject: [PATCH] Fix internal request callback 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 --- src/package_manager.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/package_manager.c b/src/package_manager.c index 4bc0799..c84cf5a 100644 --- a/src/package_manager.c +++ b/src/package_manager.c @@ -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, -- 2.7.4