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

Created wrappers for pthread_self and GetCurrentProcessId.

sem_trywait and sem_trywait_block need to return -1 on error and set errno.
parent b1b960a2
Branches
Tags
No related merge requests found
...@@ -54,21 +54,29 @@ extern "C" { ...@@ -54,21 +54,29 @@ extern "C" {
#else #else
#include <semaphore.h> /* POSIX semaphores */ #include <semaphore.h> /* POSIX semaphores */
#endif #endif
/* Win32 thread API wrappers */
ulong _beginthread(void( *start_address )( void * ) ulong _beginthread(void( *start_address )( void * )
,unsigned stack_size, void *arglist); ,unsigned stack_size, void *arglist);
#define GetCurrentThreadId() pthread_self()
#elif defined(_WIN32) #elif defined(_WIN32)
#include <process.h> /* _beginthread */ #include <process.h> /* _beginthread */
#include <limits.h> /* INT_MAX */ #include <limits.h> /* INT_MAX */
#include <errno.h> /* EAGAIN and EBUSY */ #include <errno.h> /* EAGAIN and EBUSY */
/* POSIX threads */
typedef DWORD pthread_t;
#define pthread_self() GetCurrentThreadId()
/* POSIX semaphores */ /* POSIX semaphores */
typedef HANDLE sem_t; typedef HANDLE sem_t;
#define sem_init(psem,ps,v) *(psem)=CreateSemaphore(NULL,v,INT_MAX,NULL) #define sem_init(psem,ps,v) *(psem)=CreateSemaphore(NULL,v,INT_MAX,NULL)
#define sem_wait(psem) WaitForSingleObject(*(psem),INFINITE) #define sem_wait(psem) WaitForSingleObject(*(psem),INFINITE)
#define sem_trywait(psem) (WaitForSingleObject(*(psem),0)==WAIT_OBJECT_0?0:EAGAIN) #define sem_trywait(psem) (WaitForSingleObject(*(psem),0)==WAIT_OBJECT_0?0:(errno=EAGAIN,-1))
#define sem_trywait_block(psem,t) (WaitForSingleObject(*(psem),t)==WAIT_OBJECT_0?0:EAGAIN) #define sem_trywait_block(psem,t) (WaitForSingleObject(*(psem),t)==WAIT_OBJECT_0?0:(errno=EAGAIN,-1))
#define sem_post(psem) ReleaseSemaphore(*(psem),1,NULL) #define sem_post(psem) ReleaseSemaphore(*(psem),1,NULL)
#define sem_destroy(psem) CloseHandle(*(psem)) #define sem_destroy(psem) CloseHandle(*(psem))
/* No Win32 implementation for sem_getvalue() */ /* No Win32 implementation for sem_getvalue() */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment