From: Jusung Son Date: Tue, 15 Dec 2020 01:26:52 +0000 (+0900) Subject: Add mutex lock to support multithread apps X-Git-Tag: submit/tizen/20201215.041804~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F51%2F249551%2F1;p=platform%2Fcore%2Fapi%2Fapp-event.git Add mutex lock to support multithread apps Change-Id: Icd937fc01e3dc97f1d8a7ea948b91e6c758a74dc Signed-off-by: Jusung Son --- diff --git a/src/event.c b/src/event.c index b4a2a08..06b1f47 100644 --- a/src/event.c +++ b/src/event.c @@ -52,6 +52,8 @@ 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; +static GList *__event_handle_list; #define KEY_ALIAS_APP_ID "http://tizen.org/metadata/app-event/alias-appid-mode" @@ -231,6 +233,9 @@ static void __event_eventsystem_callback(const char *real_event_name, event_handler_h handler = (event_handler_h)user_data; bundle *b; const char *registered_event_name; + GList *found; + event_cb handler_cb; + void *handler_user_data; registered_event_name = g_hash_table_lookup(__event_table, real_event_name); LOGD("real_event_name(%s , %s)", real_event_name, registered_event_name); @@ -248,14 +253,26 @@ static void __event_eventsystem_callback(const char *real_event_name, return; } - if (handler && handler->cb) { + pthread_mutex_lock(&__event_handle_lock); + found = g_list_find(__event_handle_list, handler); + if (found == NULL) { + LOGW("%p doesn't exist", handler); + pthread_mutex_unlock(&__event_handle_lock); + return; + } + + handler_cb = handler->cb; + handler_user_data = handler->user_data; + pthread_mutex_unlock(&__event_handle_lock); + + if (handler_cb) { b = bundle_decode(event_data, len); if (b == NULL) { LOGE("bundle_decode failed"); return; } - handler->cb(registered_event_name, b, handler->user_data); + handler_cb(registered_event_name, b, handler_user_data); bundle_free(b); } } @@ -315,6 +332,12 @@ int event_add_event_handler(const char *event_name, event_cb callback, 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; return EVENT_ERROR_NONE; @@ -353,6 +376,12 @@ int event_remove_event_handler(event_handler_h event_handler) if (ret < 0) return __event_error(EVENT_ERROR_IO_ERROR, __FUNCTION__, NULL); + pthread_mutex_lock(&__event_handle_lock); + __event_handle_list = g_list_remove(__event_handle_list, event_handler); + pthread_mutex_unlock(&__event_handle_lock); + + LOGW("event_remove_event_handler(%p, %s)", event_handler, event_handler->event_name); + free(event_handler->event_name); free(event_handler);