new lock algorithm with state and congestion count in one atomic int
[musl] / src / thread / pthread_detach.c
index 1348260..d9c90d1 100644 (file)
@@ -6,11 +6,10 @@ int __pthread_join(pthread_t, void **);
 static int __pthread_detach(pthread_t t)
 {
        /* Cannot detach a thread that's already exiting */
-       if (a_swap(t->exitlock, 1))
+       if (a_cas(t->exitlock, 0, INT_MIN + 1))
                return __pthread_join(t, 0);
        t->detached = 2;
-       a_store(t->exitlock, 0);
-       __wake(t->exitlock, 1, 1);
+       __unlock(t->exitlock);
        return 0;
 }