[Pavel Krauz <xkr@nettest.dk>] cancel in ptherad_join patch
Kaz Kylheku
kaz@ashi.footprints.net
Mon Mar 27 07:42:00 GMT 2000
On 27 Mar 2000, Andreas Jaeger wrote:
> Date: 27 Mar 2000 10:48:28 +0200
> From: Andreas Jaeger <aj@suse.de>
> To: Pavel Krauz <xkr@nettest.dk>,
libc-alpha Mailinglist <libc-alpha@sourceware.cygnus.com>
> Subject: [Pavel Krauz <xkr@nettest.dk>] cancel in ptherad_join patch
>
>
> Hi,
>
> I've found the following bug report. Could somebody please look at
> it?
It's good to see some actual feedback on my shady cancellation work. ;)
People are looking, which is good.
Okay, let's take a look at this patch.
>Hello
>
>Here is a patch that corrects a cancel bug in pthread_join that was
>probably introduced with new extricated interface for cancel
>
>
>regards
>Pavel
>
>
>- -- join.c.bak Mon Mar 27 09:52:52 2000
>+++ join.c Mon Mar 27 09:53:29 2000
>@@ -130,11 +130,11 @@
> if (! th->p_terminated) {
> /* Register extrication interface */
> __pthread_set_own_extricate_if(self, &extr);
>- if (!(THREAD_GETMEM(self, p_canceled)
>+ if ((THREAD_GETMEM(self, p_canceled)
> && THREAD_GETMEM(self, p_cancelstate) == PTHREAD_CANCEL_ENABLE))
>
>- th->p_joining = self;
>- else
> already_canceled = 1;
>+ else
>+ th->p_joining = self;
> __pthread_unlock(&handle->h_lock);
>
> if (already_canceled) {
>
Note that the ! operator in if test is operator is applied to the whole
parenthesized expression. So the first change simply reverses the polarity of
the test. The second changes reverse the order of the main and else clause.
I think that what we have here is simply a case of Pavel convincing himself
that it works by making semantics-preserving transformation to something that
is easier to read!
More information about the Libc-alpha
mailing list