From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 65099 invoked by alias); 16 Dec 2016 22:13:41 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 65083 invoked by uid 89); 16 Dec 2016 22:13:40 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-5.0 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=Hx-languages-length:1482, died X-HELO: mx1.redhat.com Message-ID: <1481926413.14990.628.camel@redhat.com> Subject: Re: [PATCH][BZ #20973] Robust mutexes: Fix lost wake-up. From: Torvald Riegel To: Florian Weimer Cc: GLIBC Devel , vl@samba.org, Michael Adam , Rich Felker Date: Fri, 16 Dec 2016 22:13:00 -0000 In-Reply-To: <7415d701-9dab-3c99-2716-2dcd3a4ac731@redhat.com> References: <1481840825.14990.586.camel@redhat.com> <1481840946.14990.588.camel@redhat.com> <7415d701-9dab-3c99-2716-2dcd3a4ac731@redhat.com> Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: 8bit X-SW-Source: 2016-12/txt/msg00648.txt.bz2 On Fri, 2016-12-16 at 15:11 +0100, Florian Weimer wrote: > On 12/15/2016 11:29 PM, Torvald Riegel wrote: > > diff --git a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c > > index bdfa529..01ac75e 100644 > > --- a/nptl/pthread_mutex_lock.c > > +++ b/nptl/pthread_mutex_lock.c > > @@ -182,6 +182,11 @@ __pthread_mutex_lock_full (pthread_mutex_t *mutex) > > &mutex->__data.__list.__next); > > > > oldval = mutex->__data.__lock; > > + /* This is set to FUTEX_WAITERS iff we might have shared the > > “iff” doesn't seem to be correct here because it's not an exact > equivalence, “if” is sufficient. No, I think the iff is correct. We do only set it if we may have shared the flag. > > @@ -190,9 +195,9 @@ __pthread_mutex_lock_full (pthread_mutex_t *mutex) > > /* The previous owner died. Try locking the mutex. */ > > int newval = id; > > #ifdef NO_INCR > > - newval |= FUTEX_WAITERS; > > + newval |= FUTEX_WAITERS | assume_other_futex_waiters; > > #else > > - newval |= (oldval & FUTEX_WAITERS); > > + newval |= (oldval & FUTEX_WAITERS) | assume_other_futex_waiters; > > #endif > > The NO_INCR change is quite confusing. Perhaps drop it and add a comment? Yes. > VL, what is the copyright status of your test case? So, I'll wait a little to see how the test case question resolved, and then commit it with the one change above either with or without a test case. If anyone objects to that, please speak up.