#include "package_manager_internal.h"
static GHashTable *__cb_table = NULL;
-static GHashTable *__request_cb_table = NULL;
#define GLOBAL_USER tzplatform_getuid(TZ_SYS_GLOBALAPP_USER)
typedef struct _event_info {
pkgmgr_mode mode;
event_info *head;
package_manager_request_event_cb event_cb;
+ GHashTable *request_cb_table;
void *user_data;
};
_LOGD("request callback info removed, req_id(%d)", req_id);
}
-static void __initialize_request_cb_table(void)
+static void __initialize_request_cb_table(package_manager_request_h request)
{
- __request_cb_table =
+ request->request_cb_table =
g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, __free_request_cb_info);
}
-static int __insert_request_cb_info(int req_id, package_manager_request_event_cb callback, void *user_data)
+static int __insert_request_cb_info(package_manager_request_h request, int req_id,
+ package_manager_request_event_cb callback, void *user_data)
{
struct package_manager_request_cb_info *cb_info;
+ if (request->request_cb_table == NULL)
+ return -1;
+
cb_info = calloc(1, sizeof(struct package_manager_request_cb_info));
if (cb_info == NULL)
return -1;
cb_info->req_id = req_id;
cb_info->callback = callback;
cb_info->user_data = user_data;
- g_hash_table_insert(__request_cb_table, GINT_TO_POINTER(cb_info->req_id), cb_info);
+ _LOGD("insert req_id(%d)", req_id);
+ g_hash_table_insert(request->request_cb_table, GINT_TO_POINTER(cb_info->req_id), cb_info);
return 0;
}
request->pc = NULL;
free(request->pkg_type);
__clean_all_event_info(request->head);
+ if (request->request_cb_table) {
+ g_hash_table_destroy(request->request_cb_table);
+ request->request_cb_table = NULL;
+ }
free(request);
- g_hash_table_destroy(__request_cb_table);
- __request_cb_table = NULL;
return PACKAGE_MANAGER_ERROR_NONE;
}
_LOGD("request callback called, req_id[%d]", req_id);
package_manager_request_h request = data;
- cb_info = g_hash_table_lookup(__request_cb_table, GINT_TO_POINTER(req_id));
+
+ if (request->request_cb_table)
+ cb_info = g_hash_table_lookup(request->request_cb_table,
+ GINT_TO_POINTER(req_id));
+ else
+ cb_info = NULL;
+
if (!cb_info || (cb_info && !cb_info->callback)) {
_LOGE("no callback info");
return 0;
} else if (strcasecmp(key, "end") == 0) {
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));
+ }
if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
if (strcasecmp(val, "ok") == 0) {
event_cb(req_id, pkg_type,
} else {
_LOGE("unexpected end event");
}
- g_hash_table_remove(__request_cb_table, GINT_TO_POINTER(req_id));
}
return 0;
int ret;
int req_id = 0;
- if (__request_cb_table == NULL)
- __initialize_request_cb_table();
+ if (request->request_cb_table == NULL)
+ __initialize_request_cb_table(request);
ret = __request_install(request, path, internal_request_callback, &req_id);
if (req_id > 0) {
- ret = __insert_request_cb_info(req_id, callback, user_data);
+ ret = __insert_request_cb_info(request, req_id, callback, user_data);
if (ret < 0)
return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
__FUNCTION__, "failed to create request cb info");
int ret;
int req_id = 0;
- if (__request_cb_table == NULL)
- __initialize_request_cb_table();
+ if (request->request_cb_table == NULL)
+ __initialize_request_cb_table(request);
ret = __request_uninstall(request, name, internal_request_callback, &req_id);
if (req_id > 0) {
- ret = __insert_request_cb_info(req_id, callback, user_data);
+ ret = __insert_request_cb_info(request, req_id, callback, user_data);
if (ret < 0)
return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
__FUNCTION__, "failed to create request cb info");
int ret;
int req_id = 0;
- if (__request_cb_table == NULL)
- __initialize_request_cb_table();
+ if (request->request_cb_table == NULL)
+ __initialize_request_cb_table(request);
ret = __request_move(request, name, move_type, internal_request_callback, &req_id);
if (req_id > 0) {
- ret = __insert_request_cb_info(req_id, callback, user_data);
+ ret = __insert_request_cb_info(request, req_id, callback, user_data);
if (ret < 0)
return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
__FUNCTION__, "failed to create request cb info");