Fix thread issue for earlier_callback 01/314901/7
authorInkyun Kil <inkyun.kil@samsung.com>
Tue, 23 Jul 2024 05:44:30 +0000 (14:44 +0900)
committerInkyun Kil <inkyun.kil@samsung.com>
Wed, 31 Jul 2024 01:22:18 +0000 (10:22 +0900)
Change-Id: Ib1d745c8c0b66ab41ae7b6bc8c3b7862e6147e05
Signed-off-by: Inkyun Kil <inkyun.kil@samsung.com>
src/event.c

index e2d29247fcd9101e7a8c192c9ad13e4db267cf3c..bfc7fafdf1f7e3d2cb747998c037768f50d10810 100644 (file)
@@ -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, &reg_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);