X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fthread%2Fpthread_atfork.c;h=a40d7f63287079c2ce538360305b86e7174b06e9;hb=2488d31f5a946e63e40058baf29fd2991343ea6f;hp=a7a82016d84736cb81de03dbaf53d0c91734cde9;hpb=98acf04fc00cbded6169056f2cd541d31725c091;p=musl diff --git a/src/thread/pthread_atfork.c b/src/thread/pthread_atfork.c index a7a82016..a40d7f63 100644 --- a/src/thread/pthread_atfork.c +++ b/src/thread/pthread_atfork.c @@ -8,14 +8,14 @@ static struct atfork_funcs { struct atfork_funcs *prev, *next; } *funcs; -static int lock; +static volatile int lock[2]; void __fork_handler(int who) { struct atfork_funcs *p; if (!funcs) return; if (who < 0) { - LOCK(&lock); + LOCK(lock); for (p=funcs; p; p = p->next) { if (p->prepare) p->prepare(); funcs = p; @@ -26,7 +26,7 @@ void __fork_handler(int who) else if (who && p->child) p->child(); funcs = p; } - UNLOCK(&lock); + UNLOCK(lock); } } @@ -35,7 +35,7 @@ int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(vo struct atfork_funcs *new = malloc(sizeof *new); if (!new) return -1; - LOCK(&lock); + LOCK(lock); new->next = funcs; new->prev = 0; new->prepare = prepare; @@ -43,6 +43,6 @@ int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(vo new->child = child; if (funcs) funcs->prev = new; funcs = new; - UNLOCK(&lock); + UNLOCK(lock); return 0; }