From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id 227E5384803D for ; Tue, 15 Jun 2021 22:07:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 227E5384803D Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-519-muV5Nm-GPpaA3yD11XJnoA-1; Tue, 15 Jun 2021 18:07:31 -0400 X-MC-Unique: muV5Nm-GPpaA3yD11XJnoA-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 7C15818D6A2E; Tue, 15 Jun 2021 22:07:30 +0000 (UTC) Received: from oldenburg.str.redhat.com (ovpn-115-60.ams2.redhat.com [10.36.115.60]) by smtp.corp.redhat.com (Postfix) with ESMTPS id AAEA660853; Tue, 15 Jun 2021 22:07:29 +0000 (UTC) From: Florian Weimer To: Adhemerval Zanella via Libc-alpha Subject: Re: [PATCH 07/11] nptl: Remove CANCELING_BITMASK References: <20210526165728.1772546-1-adhemerval.zanella@linaro.org> <20210526165728.1772546-8-adhemerval.zanella@linaro.org> Date: Wed, 16 Jun 2021 00:07:27 +0200 In-Reply-To: <20210526165728.1772546-8-adhemerval.zanella@linaro.org> (Adhemerval Zanella via Libc-alpha's message of "Wed, 26 May 2021 13:57:24 -0300") Message-ID: <878s3ag4tc.fsf@oldenburg.str.redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain X-Spam-Status: No, score=-6.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 15 Jun 2021 22:07:34 -0000 * Adhemerval Zanella via Libc-alpha: > The CANCELING_BITMASK is used as an optimization to avoid sending > the signal when pthread_cancel is called in a concurrent manner. > > This requires then to put both the cancellation state and type on > a shared state (cancelhandling), since 'pthread_cancel' checks > whether cancellation is enabled and asynchrnous to either cancel > itself of sending the signal. > > It also requires handle the CANCELING_BITMASK on > __pthread_disable_asynccancel, however this is incurs in the same > issues described on BZ#12683: the cancellation is acting even *after* > the syscalls returns with user visible side-effects. > > This patch removes this optimization and simplifies the pthread > cancellation implementation: pthread_cancel now first check if > cancellation is already pending and if not always send a signal > if the target is not itself. The SIGCANCEL handler is also simpified > since there is not need to setup a CAS loop. > > It also alows to move both the cancellation state and mode out of > 'cancelhadling' (it is done in subsequent patches). It looks like this causes sporadic failures in nptl/tst-sem16 because sem_wait fails with EINTR, revealing that cancellation is implemented using a signal (something that must not be visible according to POSIX). This was not a problem before because pthread_cancel sent the signal only when asynchronous cancellation was enabled. We either have to revert this, or push forward with the transition so that we can install the SIGCANCEL handler with SA_RESTART. Thanks, Florian