From: Inhong Han Date: Tue, 2 Jul 2024 04:49:04 +0000 (+0900) Subject: e_input_event: add mutex for input_event X-Git-Tag: accepted/tizen/8.0/unified/20240705.163555~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2a4c5352f8494adcd1050888ee9fffb49afe0aa4;p=platform%2Fupstream%2Fenlightenment.git e_input_event: add mutex for input_event Change-Id: If6af96be38ee390fcbf149c35240cf790e318d3e --- diff --git a/src/bin/e_input_event.c b/src/bin/e_input_event.c index adebc2153a..90d6a085af 100755 --- a/src/bin/e_input_event.c +++ b/src/bin/e_input_event.c @@ -60,6 +60,9 @@ e_input_event_source_create() source->ev_filter_list = NULL; source->data = NULL; + g_rec_mutex_init(&source->ev_handler_mutex); + g_rec_mutex_init(&source->ev_filter_mutex); + return source; } @@ -83,6 +86,9 @@ e_input_event_source_destroy(E_Input_Event_Source *source) g_queue_free(source->ev_queue); g_source_destroy(&source->gsource); g_source_unref(&source->gsource); + + g_rec_mutex_clear(&source->ev_handler_mutex); + g_rec_mutex_clear(&source->ev_filter_mutex); } E_API E_Input_Event_Handler * @@ -97,7 +103,9 @@ e_input_event_handler_add(E_Input_Event_Source *source, int event, ev_handler_fu eh->func = func; eh->user_data = user_data; + g_rec_mutex_lock(&source->ev_handler_mutex); source->ev_handler_list = g_list_append(source->ev_handler_list, eh); + g_rec_mutex_unlock(&source->ev_handler_mutex); return eh; } @@ -114,7 +122,9 @@ e_input_event_handler_prepend(E_Input_Event_Source *source, int event, ev_handle eh->func = func; eh->user_data = user_data; + g_rec_mutex_lock(&source->ev_handler_mutex); source->ev_handler_list = g_list_prepend(source->ev_handler_list, eh); + g_rec_mutex_unlock(&source->ev_handler_mutex); return eh; } @@ -124,8 +134,10 @@ e_input_event_handler_del(E_Input_Event_Source *source, E_Input_Event_Handler *e { if (!source) return; + g_rec_mutex_lock(&source->ev_handler_mutex); source->ev_handler_list = g_list_remove(source->ev_handler_list, event_handler); free(event_handler); + g_rec_mutex_unlock(&source->ev_handler_mutex); } E_API E_Input_Event_Filter * @@ -140,7 +152,9 @@ e_input_event_filter_add(E_Input_Event_Source *source, int event, ev_handler_fun ef->func = func; ef->user_data = user_data; + g_rec_mutex_lock(&source->ev_filter_mutex); source->ev_filter_list = g_list_append(source->ev_filter_list, ef); + g_rec_mutex_unlock(&source->ev_filter_mutex); return ef; } @@ -148,10 +162,12 @@ e_input_event_filter_add(E_Input_Event_Source *source, int event, ev_handler_fun E_API void e_input_event_filter_del(E_Input_Event_Source *source, E_Input_Event_Filter *event_filter) { - if (source) - source->ev_filter_list = g_list_remove(source->ev_filter_list, event_filter); + if (!source) return; + g_rec_mutex_lock(&source->ev_filter_mutex); + source->ev_filter_list = g_list_remove(source->ev_filter_list, event_filter); free(event_filter); + g_rec_mutex_unlock(&source->ev_filter_mutex); } static gboolean @@ -163,6 +179,7 @@ _process_filter_event(E_Input_Event_Source *ev_source, E_Input_Event *ev) if (!ev_source || !ev) return TRUE; + g_rec_mutex_lock(&ev_source->ev_filter_mutex); l = ev_source->ev_filter_list; while (l) { @@ -173,12 +190,16 @@ _process_filter_event(E_Input_Event_Source *ev_source, E_Input_Event *ev) if (ef->func) { if (ef->func(ef->user_data, ef->event, ev->ev_data) == FALSE) - return FALSE; + { + g_rec_mutex_unlock(&ev_source->ev_filter_mutex); + return FALSE; + } } } l = g_list_next(l); } + g_rec_mutex_unlock(&ev_source->ev_filter_mutex); return TRUE; } @@ -192,6 +213,7 @@ _process_event_handler(E_Input_Event_Source *ev_source, E_Input_Event *ev) if (!ev_source || !ev) return TRUE; + g_rec_mutex_lock(&ev_source->ev_handler_mutex); l = ev_source->ev_handler_list; while (l) { @@ -205,12 +227,16 @@ _process_event_handler(E_Input_Event_Source *ev_source, E_Input_Event *ev) if (eh->func) { if (eh->func(eh->user_data, eh->event, ev->ev_data) == FALSE) - return FALSE; + { + g_rec_mutex_unlock(&ev_source->ev_handler_mutex); + return FALSE; + } } } l = g_list_next(l); } + g_rec_mutex_unlock(&ev_source->ev_handler_mutex); return TRUE; } diff --git a/src/bin/e_input_event.h b/src/bin/e_input_event.h index 960ad30dd7..67400f4665 100755 --- a/src/bin/e_input_event.h +++ b/src/bin/e_input_event.h @@ -31,6 +31,9 @@ struct _e_input_event_source { GList *ev_handler_list; GList *ev_filter_list; GQueue *ev_queue; + + GRecMutex ev_handler_mutex; + GRecMutex ev_filter_mutex; }; struct _e_input_event {