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;
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) {
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)
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);