ecore: Create a lockless ecore_event_handler_del

Signed-off-by: Mike McCormack <mj.mccormack@samsung.com>

SVN revision: 62375
This commit is contained in:
Mike McCormack 2011-08-12 05:22:16 +00:00 committed by Mike McCormack
parent 01e790ed40
commit bfffcce2fe
4 changed files with 13 additions and 6 deletions

View File

@ -171,10 +171,7 @@ ecore_event_handler_del(Ecore_Event_Handler *event_handler)
"ecore_event_handler_del");
goto unlock;
}
EINA_SAFETY_ON_TRUE_GOTO(event_handler->delete_me, unlock);
event_handler->delete_me = 1;
event_handlers_delete_list = eina_list_append(event_handlers_delete_list, event_handler);
data = event_handler->data;
data = _ecore_event_handler_del(event_handler);
unlock:
_ecore_unlock();
@ -441,6 +438,15 @@ ecore_event_current_event_get(void)
* @}
*/
EAPI void *
_ecore_event_handler_del(Ecore_Event_Handler *event_handler)
{
EINA_SAFETY_ON_TRUE_RETURN_VAL(event_handler->delete_me, NULL);
event_handler->delete_me = 1;
event_handlers_delete_list = eina_list_append(event_handlers_delete_list, event_handler);
return event_handler->data;
}
void
_ecore_event_shutdown(void)
{

View File

@ -31,7 +31,7 @@ _ecore_job_init(void)
void
_ecore_job_shutdown(void)
{
ecore_event_handler_del(_ecore_job_handler);
_ecore_event_handler_del(_ecore_job_handler);
_ecore_job_handler = NULL;
}

View File

@ -147,6 +147,7 @@ void _ecore_event_shutdown(void);
int _ecore_event_exist(void);
Ecore_Event *_ecore_event_add(int type, void *ev, Ecore_End_Cb func_free, void *data);
void _ecore_event_call(void);
void *_ecore_event_handler_del(Ecore_Event_Handler *event_handler);
Ecore_Timer *_ecore_exe_doomsday_clock_get(Ecore_Exe *exe);
void _ecore_exe_doomsday_clock_set(Ecore_Exe *exe, Ecore_Timer *dc);

View File

@ -839,7 +839,7 @@ _ecore_thread_shutdown(void)
}
if (_ecore_thread_global_hash)
eina_hash_free(_ecore_thread_global_hash);
ecore_event_handler_del(del_handler);
_ecore_event_handler_del(del_handler);
have_main_loop_thread = 0;
del_handler = NULL;