optimize contended normal mutex case; add int compare-and-swap atomic
[musl] / src / thread / pthread_create.c
index d829fa2..7494a48 100644 (file)
@@ -150,6 +150,7 @@ static void init_threads()
 {
        struct sigaction sa = { .sa_flags = SA_SIGINFO | SA_RESTART };
        libc.lock = __lock;
+       libc.lockfile = __lockfile;
        libc.cancelpt = cancelpt;
        libc.rsyscall = rsyscall;
        sa.sa_sigaction = cancel_handler;
@@ -194,7 +195,7 @@ int pthread_create(pthread_t *res, const pthread_attr_t *attr, void *(*entry)(vo
        size += __pthread_tsd_size;
        map = mmap(0, size, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, -1, 0);
        if (!map) return EAGAIN;
-       mprotect(map, guard, PROT_NONE);
+       if (guard) mprotect(map, guard, PROT_NONE);
 
        tsd = map + size - __pthread_tsd_size;
        new = (void *)(tsd - sizeof *new - PAGE_SIZE%sizeof *new);