fix for WaitForSingleObject POSIX implementation by codesquid

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@4574 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
kichik 2006-03-11 17:34:20 +00:00
parent 476296ded6
commit 629aa42eec

View file

@ -73,18 +73,17 @@ BOOL CloseHandle(HANDLE _event)
DWORD WaitForSingleObject(HANDLE _event, DWORD) { DWORD WaitForSingleObject(HANDLE _event, DWORD) {
DWORD ret = WAIT_OBJECT_0; DWORD ret = WAIT_OBJECT_0;
evnet_t *event = (evnet_t *) _event; evnet_t *event = (evnet_t *) _event;
if (pthread_mutex_lock(&event->mutex))
return !WAIT_OBJECT_0;
if (!event->signaled) if (!event->signaled)
{ {
pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER; if (pthread_cond_wait(&event->cond, &event->mutex))
if (pthread_mutex_lock(&m) || pthread_cond_wait(&event->cond, &m))
{ {
ret = !WAIT_OBJECT_0; ret = !WAIT_OBJECT_0;
} }
pthread_mutex_unlock(&m);
pthread_mutex_destroy(&m);
} }
if (!ResetEvent(_event)) event->signaled = false;
return !WAIT_OBJECT_0; pthread_mutex_unlock(&event->mutex);
return ret; return ret;
} }