eina semaphore lock - don't wake up because of signals
@fix - this fixes eina sephamore lock/wait to not return just because of a signal sent to the process - try again if the semaphore wait is interrupted by a signal as opposed to a semaphore wakeup.
This commit is contained in:
parent
f153cad879
commit
0e8d1c8485
|
@ -784,14 +784,31 @@ eina_semaphore_free(Eina_Semaphore *sem)
|
||||||
static inline Eina_Bool
|
static inline Eina_Bool
|
||||||
eina_semaphore_lock(Eina_Semaphore *sem)
|
eina_semaphore_lock(Eina_Semaphore *sem)
|
||||||
{
|
{
|
||||||
|
Eina_Bool ok = EINA_FALSE;
|
||||||
|
|
||||||
if (!sem)
|
if (!sem)
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if (
|
||||||
#if defined(EINA_HAVE_OSX_SEMAPHORE)
|
#if defined(EINA_HAVE_OSX_SEMAPHORE)
|
||||||
return (sem_wait(sem->sema) == 0) ? EINA_TRUE : EINA_FALSE;
|
sem_wait(sem->sema)
|
||||||
#else
|
#else
|
||||||
return (sem_wait(sem) == 0) ? EINA_TRUE : EINA_FALSE;
|
sem_wait(sem)
|
||||||
#endif
|
#endif
|
||||||
|
== 0)
|
||||||
|
{
|
||||||
|
ok = EINA_TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (errno != EINTR)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline Eina_Bool
|
static inline Eina_Bool
|
||||||
|
|
Loading…
Reference in New Issue