mirror of
https://github.com/fluencelabs/musl
synced 2025-06-28 06:02:04 +00:00
fix bug in synccall with no threads: lock was taken but never released
This commit is contained in:
@ -54,15 +54,15 @@ void __synccall(void (*func)(void *), void *ctx)
|
|||||||
struct chain *cur, *next;
|
struct chain *cur, *next;
|
||||||
uint64_t oldmask;
|
uint64_t oldmask;
|
||||||
|
|
||||||
pthread_rwlock_wrlock(&lock);
|
|
||||||
|
|
||||||
__syscall(SYS_rt_sigprocmask, SIG_BLOCK, (uint64_t[]){-1}, &oldmask, 8);
|
|
||||||
|
|
||||||
if (!libc.threads_minus_1) {
|
if (!libc.threads_minus_1) {
|
||||||
func(ctx);
|
func(ctx);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pthread_rwlock_wrlock(&lock);
|
||||||
|
|
||||||
|
__syscall(SYS_rt_sigprocmask, SIG_BLOCK, (uint64_t[]){-1}, &oldmask, 8);
|
||||||
|
|
||||||
sem_init(&chaindone, 0, 0);
|
sem_init(&chaindone, 0, 0);
|
||||||
sem_init(&chainlock, 0, 1);
|
sem_init(&chainlock, 0, 1);
|
||||||
chainlen = 0;
|
chainlen = 0;
|
||||||
|
Reference in New Issue
Block a user