diff options
Diffstat (limited to 'cancel.c')
-rw-r--r-- | cancel.c | 22 |
1 files changed, 19 insertions, 3 deletions
@@ -50,12 +50,16 @@ pthread_setcancelstate (int state, int *oldstate) * This function atomically sets the calling thread's * cancelability state to 'state' and returns the previous * cancelability state at the location referenced by - * 'oldstate' + * 'oldstate'. * * NOTES: * 1) Use to disable cancellation around 'atomic' code that * includes cancellation points * + * COMPATIBILITY ADDITIONS + * If 'oldstate' is NULL then the previous state is not returned + * but the function still succeeds. (Solaris) + * * RESULTS * 0 successfully set cancelability type, * EINVAL 'state' is invalid @@ -71,7 +75,11 @@ pthread_setcancelstate (int state, int *oldstate) state == PTHREAD_CANCEL_DISABLE)) { - *oldstate = self->cancelState; + if (oldstate != NULL) + { + *oldstate = self->cancelState; + } + self->cancelState = state; result = 0; @@ -116,6 +124,10 @@ pthread_setcanceltype (int type, int *oldtype) * 1) Use with caution; most code is not safe for use * with asynchronous cancelability. * + * COMPATIBILITY ADDITIONS + * If 'oldtype' is NULL then the previous type is not returned + * but the function still succeeds. (Solaris) + * * RESULTS * 0 successfully set cancelability type, * EINVAL 'type' is invalid @@ -131,7 +143,11 @@ pthread_setcanceltype (int type, int *oldtype) type == PTHREAD_CANCEL_ASYNCHRONOUS)) { - *oldtype = self->cancelType; + if (oldtype != NULL) + { + *oldtype = self->cancelType; + } + self->cancelType = type; result = 0; |