diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-04-12 16:40:08 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-04-12 16:40:08 +0200 |
| commit | 8922b63769cd0d1fbc2649400ba33bc66cb0a632 (patch) | |
| tree | 5076e8d995e99d2e3a2d5e8af38fa94949ee4e5f /src/libtools | |
| parent | 30d4713b2820351a0c180efd421a7b952abe6b52 (diff) | |
| download | box64-8922b63769cd0d1fbc2649400ba33bc66cb0a632.tar.gz box64-8922b63769cd0d1fbc2649400ba33bc66cb0a632.zip | |
Fixed some issues with pthread wrapping
Diffstat (limited to 'src/libtools')
| -rwxr-xr-x | src/libtools/threads.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/libtools/threads.c b/src/libtools/threads.c index 3c73105b..0cd08a1b 100755 --- a/src/libtools/threads.c +++ b/src/libtools/threads.c @@ -727,6 +727,8 @@ typedef struct aligned_mutex_s { pthread_mutex_t* getAlignedMutexWithInit(pthread_mutex_t* m, int init) { + if(!m) + return NULL; aligned_mutex_t* am = (aligned_mutex_t*)m; if(init && (am->sign==SIGNMTX)) return am->m; @@ -860,8 +862,9 @@ int my___pthread_mutex_destroy(pthread_mutex_t *m) __attribute__((alias("my_pthr EXPORT int my_pthread_mutex_init(pthread_mutex_t *m, my_mutexattr_t *att) { my_mutexattr_t mattr = {0}; - mattr.x86 = att->x86; - return pthread_mutex_init(getAlignedMutexWithInit(m, 0), &mattr.nat); + if(att) + mattr.x86 = att->x86; + return pthread_mutex_init(getAlignedMutexWithInit(m, 0), att?(&mattr.nat):NULL); } EXPORT int my___pthread_mutex_init(pthread_mutex_t *m, my_mutexattr_t *att) __attribute__((alias("my_pthread_mutex_init"))); @@ -944,9 +947,11 @@ EXPORT int my_pthread_condattr_setpshared(x64emu_t* emu, my_condattr_t* c, int p EXPORT int my_pthread_cond_init(x64emu_t* emu, pthread_cond_t *pc, my_condattr_t* c) { my_condattr_t cond = {0}; - cond.x86 = c->x86; - int ret = pthread_cond_init(pc, &cond.nat); - c->x86 = cond.x86; + if(c) + cond.x86 = c->x86; + int ret = pthread_cond_init(pc, c?(&cond.nat):NULL); + if(c) + c->x86 = cond.x86; return ret; } @@ -990,9 +995,11 @@ EXPORT int my_pthread_barrierattr_setpshared(x64emu_t* emu, my_barrierattr_t* b, EXPORT int my_pthread_barrier_init(x64emu_t* emu, pthread_barrier_t* bar, my_barrierattr_t* b, uint32_t count) { my_barrierattr_t battr = {0}; - battr.x86 = b->x86; - int ret = pthread_barrier_init(bar, &battr.nat, count); - b->x86 = battr.x86; + if(b) + battr.x86 = b->x86; + int ret = pthread_barrier_init(bar, b?(&battr.nat):NULL, count); + if(b) + b->x86 = battr.x86; return ret; } |