eina: fix Eina_Barrier when pthread doesn't provide one.

Patch by Ulisses Furquim <ulisses@profusion.mobi>


SVN revision: 80907
This commit is contained in:
Cedric BAIL 2012-12-14 02:18:02 +00:00
parent 9a22dfe79c
commit 498b46802c
1 changed files with 3 additions and 6 deletions

View File

@ -3,7 +3,7 @@ typedef struct _Eina_Barrier Eina_Barrier;
struct _Eina_Barrier struct _Eina_Barrier
{ {
int needed, called; int needed, called;
Eina_Lock lock, cond_lock; Eina_Lock cond_lock;
Eina_Condition cond; Eina_Condition cond;
}; };
@ -12,8 +12,6 @@ eina_barrier_new(Eina_Barrier *barrier, int needed)
{ {
barrier->needed = needed; barrier->needed = needed;
barrier->called = 0; barrier->called = 0;
if (!eina_lock_new(&(barrier->lock)))
return EINA_FALSE;
if (!eina_lock_new(&(barrier->cond_lock))) if (!eina_lock_new(&(barrier->cond_lock)))
return EINA_FALSE; return EINA_FALSE;
if (!eina_condition_new(&(barrier->cond), &(barrier->cond_lock))) if (!eina_condition_new(&(barrier->cond), &(barrier->cond_lock)))
@ -26,7 +24,6 @@ eina_barrier_free(Eina_Barrier *barrier)
{ {
eina_condition_free(&(barrier->cond)); eina_condition_free(&(barrier->cond));
eina_lock_free(&(barrier->cond_lock)); eina_lock_free(&(barrier->cond_lock));
eina_lock_free(&(barrier->lock));
barrier->needed = 0; barrier->needed = 0;
barrier->called = 0; barrier->called = 0;
} }
@ -34,7 +31,7 @@ eina_barrier_free(Eina_Barrier *barrier)
static inline Eina_Bool static inline Eina_Bool
eina_barrier_wait(Eina_Barrier *barrier) eina_barrier_wait(Eina_Barrier *barrier)
{ {
eina_lock_take(&(barrier->lock)); eina_lock_take(&(barrier->cond_lock));
barrier->called++; barrier->called++;
if (barrier->called == barrier->needed) if (barrier->called == barrier->needed)
{ {
@ -43,6 +40,6 @@ eina_barrier_wait(Eina_Barrier *barrier)
} }
else else
eina_condition_wait(&(barrier->cond)); eina_condition_wait(&(barrier->cond));
eina_lock_release(&(barrier->lock)); eina_lock_release(&(barrier->cond_lock));
return EINA_TRUE; return EINA_TRUE;
} }