public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
To: Florian Weimer <fweimer@redhat.com>,
	Adhemerval Zanella via Libc-alpha <libc-alpha@sourceware.org>
Subject: Re: [PATCH v2 4/9] nptl: Remove CANCELING_BITMASK
Date: Tue, 1 Jun 2021 13:36:07 -0300	[thread overview]
Message-ID: <837f443f-d47f-5b06-6170-8cec8219a55f@linaro.org> (raw)
In-Reply-To: <10f40817-50da-5997-c2e8-3aa4edfab4a4@linaro.org>



On 01/06/2021 10:50, Adhemerval Zanella wrote:
>>> diff --git a/nptl/pthread_cancel.c b/nptl/pthread_cancel.c
>>> index deb404600c..8dfbcff8c3 100644
>>> --- a/nptl/pthread_cancel.c
>>> +++ b/nptl/pthread_cancel.c
>>
>>> @@ -104,72 +87,33 @@ __pthread_cancel (pthread_t th)
>>>  		    " must be installed for pthread_cancel to work\n");
>>>    }
>>> +
>>> +  int oldch = atomic_fetch_or_acquire (&pd->cancelhandling, CANCELED_BITMASK);
>>> +  if ((oldch & CANCELED_BITMASK) != 0)
>>> +    return 0;
>>> +
>>> +  if (pd == THREAD_SELF)
>>>      {
>>> +      /* A single-threaded process should be able to kill itself, since there
>>> +	 is nothing in the POSIX specification that says that it cannot.  So
>>> +	 we set multiple_threads to true so that cancellation points get
>>> +	 executed.  */
>>> +      THREAD_SETMEM (THREAD_SELF, header.multiple_threads, 1);
>>>  #ifndef TLS_MULTIPLE_THREADS_IN_TCB
>>> -	__libc_multiple_threads = 1;
>>> +      __libc_multiple_threads = 1;
>>>  #endif
>>> +
>>> +      THREAD_SETMEM (pd, result, PTHREAD_CANCELED);
>>> +      if ((oldch & CANCELTYPE_BITMASK) != 0)
>>> +	__do_cancel ();
>>> +      return 0;
>>>      }
>>
>> The last part is for asynchronous self-cancel, right?  Don't we have to
>> check that cancellation is enabled, too?

Ok, so I recall why I did this originally and checking if cancel is enable
is not strictly necessary since SIGCANCEL signal handler will bail early
if cancellation is not enabled.  But it does seems the correct way to do
it.

> 
> Indeed it should be:
> 
>       if ((oldch & CANCELSTATE_BIT)

This should be '(oldch & CANCELSTATE_BIT) == 0'.

>           && (oldch & CANCELTYPE_BITMASK) != 0)          
> 
> I ended up fixing it later in the serie with the cancel type and state 
> refactor.  I have fixed it locally.
> 


  reply	other threads:[~2021-06-01 16:36 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-27 17:28 [PATCH v2 0/9] nptl: pthread cancellation refactor Adhemerval Zanella
2021-05-27 17:28 ` [PATCH v2 1/9] nptl: Remove exit-thread.h Adhemerval Zanella
2021-06-01  7:51   ` Florian Weimer
2021-06-01 12:55     ` Adhemerval Zanella
2021-05-27 17:28 ` [PATCH v2 2/9] nptl: Deallocate the thread stack on setup failure (BZ #19511) Adhemerval Zanella
2021-06-01  8:32   ` Florian Weimer
2021-06-01 13:08     ` Adhemerval Zanella
2021-06-01 13:55       ` Adhemerval Zanella
2021-06-02 12:56   ` [PATCH v3] " Adhemerval Zanella
2021-06-02 13:08     ` Andreas Schwab
2021-06-02 13:39       ` Adhemerval Zanella
2021-06-02 13:41         ` Andreas Schwab
2021-06-02 14:01           ` Adhemerval Zanella
2021-06-02 14:07             ` Andreas Schwab
2021-06-02 14:15               ` Adhemerval Zanella
2021-06-02 14:30                 ` Andreas Schwab
2021-06-02 14:42                   ` Adhemerval Zanella
2021-06-02 18:20               ` Joseph Myers
2021-06-02 18:30                 ` Florian Weimer
2021-06-02 19:02                   ` Adhemerval Zanella
2021-06-02 19:11                     ` Florian Weimer
2021-06-08 10:56     ` Florian Weimer
2021-06-08 17:01       ` Adhemerval Zanella
2021-06-09 13:49         ` Florian Weimer
2021-06-09 17:07           ` Adhemerval Zanella
2021-05-27 17:28 ` [PATCH v2 3/9] nptl: Install cancellation handler on pthread_cancel Adhemerval Zanella
2021-05-31 18:18   ` Adhemerval Zanella
2021-06-01  8:38     ` Florian Weimer
2021-06-01 13:10       ` Adhemerval Zanella
2021-06-01  8:39   ` Florian Weimer
2021-05-27 17:28 ` [PATCH v2 4/9] nptl: Remove CANCELING_BITMASK Adhemerval Zanella
2021-06-01  9:03   ` Florian Weimer
2021-06-01 13:50     ` Adhemerval Zanella
2021-06-01 16:36       ` Adhemerval Zanella [this message]
2021-05-27 17:28 ` [PATCH v2 5/9] nptl: Move cancel state out of cancelhandling Adhemerval Zanella
2021-06-01  9:58   ` Florian Weimer
2021-06-02 13:09     ` Adhemerval Zanella
2021-05-27 17:28 ` [PATCH v2 6/9] nptl: Move cancel type " Adhemerval Zanella
2021-06-01 12:37   ` Florian Weimer
2021-06-02 13:11     ` Adhemerval Zanella
2021-06-09 17:06       ` Adhemerval Zanella
2021-05-27 17:28 ` [PATCH v2 7/9] nptl: Implement raise in terms of pthread_kill Adhemerval Zanella
2021-06-01 12:40   ` Florian Weimer
2021-06-02 13:14     ` Adhemerval Zanella
2021-05-27 17:28 ` [PATCH v2 8/9] nptl: Use pthread_kill on pthread_cancel Adhemerval Zanella
2021-06-01 12:41   ` Florian Weimer
2021-05-27 17:28 ` [PATCH v2 9/9] nptl: Avoid async cancellation to wrongly update __nptl_nthreads (BZ #19366) Adhemerval Zanella
2021-06-01 14:29   ` Florian Weimer
2021-06-02 13:15     ` Adhemerval Zanella

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=837f443f-d47f-5b06-6170-8cec8219a55f@linaro.org \
    --to=adhemerval.zanella@linaro.org \
    --cc=fweimer@redhat.com \
    --cc=libc-alpha@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).