ecore: lock all broadcast.

SVN revision: 63567
This commit is contained in:
Cedric BAIL 2011-09-23 13:26:54 +00:00
parent 9101e46ae6
commit 16fc152856
1 changed files with 7 additions and 3 deletions

View File

@ -87,6 +87,7 @@ static Eina_Condition _thread_feedback_cond;
static Eina_Lock _thread_id_lock;
static int _thread_id = -1;
static int _thread_id_max = 0;
static int _thread_id_update = 0;
Eina_Lock _ecore_main_loop_lock;
int _ecore_main_lock_count;
@ -361,9 +362,9 @@ ecore_thread_main_loop_begin(void)
eina_condition_new(&order->c, &order->m);
order->suspend = EINA_TRUE;
eina_lock_take(&order->m);
_ecore_main_loop_thread_safe_call(order);
eina_lock_take(&order->m);
while (order->current_id != _thread_id)
eina_condition_wait(&order->c);
eina_lock_release(&order->m);
@ -400,6 +401,7 @@ ecore_thread_main_loop_end(void)
current_id = _thread_id;
eina_lock_take(&_thread_mutex);
_thread_id_update = _thread_id;
eina_condition_broadcast(&_thread_cond);
eina_lock_release(&_thread_mutex);
@ -675,11 +677,13 @@ _thread_callback(void *data __UNUSED__,
{
eina_lock_take(&_thread_mutex);
eina_lock_take(&call->m);
_thread_id = call->current_id;
eina_condition_broadcast(&call->c);
eina_lock_release(&call->m);
eina_condition_wait(&_thread_cond);
while (_thread_id_update != _thread_id)
eina_condition_wait(&_thread_cond);
eina_lock_release(&_thread_mutex);
_thread_id = -1;