work around a nasty bug in linux readv syscall
[oweals/musl.git] / src / thread / pthread_setcancelstate.c
index 23c38851a5910fe88aad2205dd35154d41708277..a85cc800f7c64f8736133c2fad6ec6bff3ee791f 100644 (file)
@@ -3,8 +3,8 @@
 int pthread_setcancelstate(int new, int *old)
 {
        struct pthread *self = pthread_self();
-       if (old) *old = self->canceldisable;
+       if (old) *old = self->canceldisable & 1;
        if ((unsigned)new > 1) return EINVAL;
-       self->canceldisable = new;
+       self->canceldisable = (self->canceldisable & ~1) | new;
        return 0;
 }