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"
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);
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);
}
}
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;
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);