fix invalid pointer in synccall (multithread setuid, etc.)
authorRich Felker <dalias@aerifal.cx>
Mon, 2 Sep 2013 19:06:46 +0000 (15:06 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 2 Sep 2013 19:06:46 +0000 (15:06 -0400)
the head pointer was not being reset between calls to synccall, so any
use of this interface more than once would build the linked list
incorrectly, keeping the (now invalid) list nodes from the previous
call.

src/thread/synccall.c

index 706c8e73472f5abb8b3526bb0c9bbfadd523dcc6..c54570befc05ec95d0083d51428735e441ace6ba 100644 (file)
@@ -58,6 +58,7 @@ void __synccall(void (*func)(void *), void *ctx)
        sem_init(&chaindone, 0, 0);
        sem_init(&chainlock, 0, 1);
        chainlen = 0;
+       head = 0;
        callback = func;
        context = ctx;