Index: fusl/src/thread/pthread_detach.c |
diff --git a/fusl/src/thread/pthread_detach.c b/fusl/src/thread/pthread_detach.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ed77f74d520bff3a16ef5e055f08bbf021fe91d4 |
--- /dev/null |
+++ b/fusl/src/thread/pthread_detach.c |
@@ -0,0 +1,17 @@ |
+#include "pthread_impl.h" |
+#include <threads.h> |
+ |
+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)) |
+ return __pthread_join(t, 0); |
+ t->detached = 2; |
+ __unlock(t->exitlock); |
+ return 0; |
+} |
+ |
+weak_alias(__pthread_detach, pthread_detach); |
+weak_alias(__pthread_detach, thrd_detach); |