floating point environment, untested
[oweals/musl.git] / src / thread / pthread_setcancelstate.c
index a85cc800f7c64f8736133c2fad6ec6bff3ee791f..ba2b231190436076b1d200bc76fa6e2c5dec9443 100644 (file)
@@ -2,9 +2,14 @@
 
 int pthread_setcancelstate(int new, int *old)
 {
-       struct pthread *self = pthread_self();
-       if (old) *old = self->canceldisable & 1;
-       if ((unsigned)new > 1) return EINVAL;
-       self->canceldisable = (self->canceldisable & ~1) | new;
+       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;
+       }
        return 0;
 }