From: Inkyun Kil Date: Tue, 23 Jul 2024 05:44:30 +0000 (+0900) Subject: Fix thread issue for earlier_callback X-Git-Tag: accepted/tizen/unified/20240801.150159~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4eef2e9f7f0fae760e29c2cbd78227bd7358802f;p=platform%2Fcore%2Fapi%2Fapp-event.git Fix thread issue for earlier_callback Change-Id: Ib1d745c8c0b66ab41ae7b6bc8c3b7862e6147e05 Signed-off-by: Inkyun Kil --- diff --git a/src/event.c b/src/event.c index e2d2924..bfc7faf 100644 --- a/src/event.c +++ b/src/event.c @@ -49,8 +49,6 @@ typedef struct event_handler { void *user_data; } event_handler_s; -static event_cb __earlier_callback; -static void *__earlier_user_data; static pthread_mutex_t __register_sync_lock = PTHREAD_MUTEX_INITIALIZER; static GHashTable *__event_table; static pthread_mutex_t __event_handle_lock = PTHREAD_MUTEX_INITIALIZER; @@ -233,17 +231,6 @@ static void __event_eventsystem_callback(const char *real_event_name, if (registered_event_name == NULL) registered_event_name = real_event_name; - if (__earlier_callback != NULL) { - b = bundle_decode(event_data, len); - if (b == NULL) { - LOGE("bundle_decode failed"); - return; - } - __earlier_callback(registered_event_name, b, __earlier_user_data); - bundle_free(b); - return; - } - pthread_mutex_lock(&__event_handle_lock); found = g_list_find(__event_handle_list, handler); if (found == NULL) { @@ -305,14 +292,17 @@ int event_add_event_handler(const char *event_name, event_cb callback, goto error; } + handler->cb = callback; + handler->user_data = user_data; + + pthread_mutex_lock(&__event_handle_lock); + __event_handle_list = g_list_prepend(__event_handle_list, handler); + pthread_mutex_unlock(&__event_handle_lock); + pthread_mutex_lock(&__register_sync_lock); - __earlier_callback = callback; - __earlier_user_data = user_data; ret = eventsystem_register_application_event(handler->event_name, ®_id, &event_type, (eventsystem_cb)__event_eventsystem_callback, handler); - __earlier_callback = NULL; - __earlier_user_data = NULL; pthread_mutex_unlock(&__register_sync_lock); if (ret < 0) @@ -320,20 +310,15 @@ int event_add_event_handler(const char *event_name, event_cb callback, handler->reg_id = reg_id; handler->event_type = event_type; - handler->cb = callback; - handler->user_data = user_data; - - pthread_mutex_lock(&__event_handle_lock); - __event_handle_list = g_list_prepend(__event_handle_list, handler); - pthread_mutex_unlock(&__event_handle_lock); - - LOGW("event_add_event_handler(%p, %s)", handler, event_name); - *event_handler = handler; + LOGW("event_add_event_handler(%p, %s)", handler, event_name); return EVENT_ERROR_NONE; error: + pthread_mutex_lock(&__event_handle_lock); + __event_handle_list = g_list_remove(__event_handle_list, handler); + pthread_mutex_unlock(&__event_handle_lock); if (handler) { if (handler->event_name) free(handler->event_name);