add new masked cancellation mode
[musl] / src / thread / pthread_setcancelstate.c
index ba2b231..822a139 100644 (file)
@@ -1,15 +1,13 @@
 #include "pthread_impl.h"
 
-int pthread_setcancelstate(int new, int *old)
+int __pthread_setcancelstate(int new, int *old)
 {
-       if (new > 1U) return EINVAL;
-       if (libc.main_thread) {
-               struct pthread *self = __pthread_self();
-               if (old) *old = self->canceldisable;
-               self->canceldisable = new;
-       } else {
-               if (old) *old = libc.canceldisable;
-               libc.canceldisable = new;
-       }
+       if (new > 2U) return EINVAL;
+       if (!libc.has_thread_pointer) return ENOSYS;
+       struct pthread *self = __pthread_self();
+       if (old) *old = self->canceldisable;
+       self->canceldisable = new;
        return 0;
 }
+
+weak_alias(__pthread_setcancelstate, pthread_setcancelstate);