diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-09-23 19:45:13 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-09-23 19:45:13 +0200 |
| commit | 7317472b5f62316e5817f9e89ae2ddf99862412d (patch) | |
| tree | fa07f9df10da8400097c372289ec58094de5f6e2 /src/wrapped32/wrappedlibpthread.c | |
| parent | 9271684e5a9f356056a6038f652ec1c15ed16ed2 (diff) | |
| download | box64-7317472b5f62316e5817f9e89ae2ddf99862412d.tar.gz box64-7317472b5f62316e5817f9e89ae2ddf99862412d.zip | |
[BOX32][WRAPPER] More 32bits wrapped functions, and a few fixes on threads handling
Diffstat (limited to 'src/wrapped32/wrappedlibpthread.c')
| -rwxr-xr-x | src/wrapped32/wrappedlibpthread.c | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/src/wrapped32/wrappedlibpthread.c b/src/wrapped32/wrappedlibpthread.c index 72a3f5c4..dbeee699 100755 --- a/src/wrapped32/wrappedlibpthread.c +++ b/src/wrapped32/wrappedlibpthread.c @@ -62,6 +62,7 @@ typedef struct my_sem_32_s { sem_t *sem; } my_sem_32_t; +#define GET_SEM(sem) sem_t* _sem = (sem->sign != SEM_SIGN)?((sem_t*)sem):(sem->sem) EXPORT int my32_sem_close(sem_t* sem) { return sem_close(sem); @@ -78,11 +79,8 @@ EXPORT int my32_sem_destroy(my_sem_32_t* sem) } EXPORT int my32_sem_getvalue(my_sem_32_t* sem, int* val) { - if(sem->sign != SEM_SIGN) - return sem_getvalue((sem_t*)sem, val); - int ret = 0; - ret = sem_getvalue(sem->sem, val); - return ret; + GET_SEM(sem); + return sem_getvalue(_sem, val); } EXPORT int my32_sem_init(my_sem_32_t* sem, int pshared, uint32_t val) { @@ -98,32 +96,31 @@ EXPORT void* my32_sem_open(const char* name, int flags) } EXPORT int my32_sem_post(my_sem_32_t* sem) { - if(sem->sign != SEM_SIGN) - return sem_post((sem_t*)sem); - return sem_post(sem->sem); + GET_SEM(sem); + return sem_post(_sem); } EXPORT int my32_sem_timedwait(my_sem_32_t* sem, struct timespec * t) { + GET_SEM(sem); + // Not sure it's usefull + //if(!sem_trywait(_sem))) + // return 0; // some x86 game are not computing timeout correctly (ex: Anomaly Warzone Earth linux version) while(t->tv_nsec>=1000000000) { t->tv_nsec-=1000000000; t->tv_sec+=1; } - if(sem->sign != SEM_SIGN) - return sem_timedwait((sem_t*)sem, t); - return sem_timedwait(sem->sem, t); + return sem_timedwait(_sem, t); } EXPORT int my32_sem_trywait(my_sem_32_t* sem) { - if(sem->sign != SEM_SIGN) - return sem_trywait((sem_t*)sem); - return sem_trywait(sem->sem); + GET_SEM(sem); + return sem_trywait(_sem); } EXPORT int my32_sem_wait(my_sem_32_t* sem) { - if(sem->sign != SEM_SIGN) - return sem_wait((sem_t*)sem); - return sem_wait(sem->sem); + GET_SEM(sem); + return sem_wait(_sem); } |