Skip to content
Snippets Groups Projects
Commit d9a98c6d authored by rswindell's avatar rswindell
Browse files

Fixed Win32 semaphore wrappers to return correct values (0 on success,

-1 on error).
parent 529ebc95
No related branches found
No related tags found
No related merge requests found
......@@ -72,19 +72,18 @@ extern "C" {
/* POSIX semaphores */
typedef HANDLE sem_t;
#define sem_init(psem,ps,v) *(psem)=CreateSemaphore(NULL,v,INT_MAX,NULL)
#define sem_wait(psem) WaitForSingleObject(*(psem),INFINITE)
#define sem_trywait(psem) (WaitForSingleObject(*(psem),0)==WAIT_OBJECT_0?0:(errno=EAGAIN,-1))
#define sem_post(psem) ReleaseSemaphore(*(psem),1,NULL)
#define sem_destroy(psem) CloseHandle(*(psem))
/* No Win32 implementation for sem_getvalue() */
/* How about this? */
#define sem_getvalue(psem,val) ReleaseSemaphore(*(psem),0,(LPLONG)val)
#define sem_init(psem,ps,v) *(psem)=CreateSemaphore(NULL,v,INT_MAX,NULL),*(psem)==NULL?-1:0
/* NOT POSIX */
#define sem_trywait_block(psem,t) (WaitForSingleObject(*(psem),t)==WAIT_OBJECT_0?0:(errno=EAGAIN,-1))
/* POSIX */
#define sem_wait(psem) sem_trywait_block(psem,INFINITE)
#define sem_trywait(psem) sem_trywait_block(psem,0)
#define sem_post(psem) (ReleaseSemaphore(*(psem),1,NULL)==TRUE?0:-1)
#define sem_destroy(psem) (CloseHandle(*(psem))==TRUE?0:-1)
#define sem_getvalue(psem,val) ReleaseSemaphore(*(psem),0,(LPLONG)val)
#elif defined(__OS2__) /* These have *not* been tested! */
/* POSIX semaphores */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment