From owner-svn-src-all@freebsd.org Sat Jun 25 17:14:43 2016 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B36BAB80E57; Sat, 25 Jun 2016 17:14:43 +0000 (UTC) (envelope-from jilles@stack.nl) Received: from mx1.stack.nl (relay04.stack.nl [IPv6:2001:610:1108:5010::107]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailhost.stack.nl", Issuer "CA Cert Signing Authority" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 803071C02; Sat, 25 Jun 2016 17:14:43 +0000 (UTC) (envelope-from jilles@stack.nl) Received: from snail.stack.nl (snail.stack.nl [IPv6:2001:610:1108:5010::131]) by mx1.stack.nl (Postfix) with ESMTP id 5BE55B80B6; Sat, 25 Jun 2016 19:14:39 +0200 (CEST) Received: by snail.stack.nl (Postfix, from userid 1677) id 3575B28494; Sat, 25 Jun 2016 19:14:40 +0200 (CEST) Date: Sat, 25 Jun 2016 19:14:40 +0200 From: Jilles Tjoelker To: Konstantin Belousov Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r302194 - head/lib/libthr/thread Message-ID: <20160625171440.GA19698@stack.nl> References: <201606251130.u5PBUeGC001988@repo.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201606251130.u5PBUeGC001988@repo.freebsd.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Jun 2016 17:14:43 -0000 On Sat, Jun 25, 2016 at 11:30:40AM +0000, Konstantin Belousov wrote: > Author: kib > Date: Sat Jun 25 11:30:40 2016 > New Revision: 302194 > URL: https://svnweb.freebsd.org/changeset/base/302194 > Log: > For pthread_mutex_trylock() call on owned error-check or non-portable > adaptive mutex, return EDEADLK as required by POSIX. The > pthread_mutex_lock() is already compliant. > Tested by: Guy Yur > Sponsored by: The FreeBSD Foundation > MFC after: 2 weeks > Approved by: re (gjb) > Modified: > head/lib/libthr/thread/thr_mutex.c > Modified: head/lib/libthr/thread/thr_mutex.c > ============================================================================== > --- head/lib/libthr/thread/thr_mutex.c Sat Jun 25 10:08:04 2016 (r302193) > +++ head/lib/libthr/thread/thr_mutex.c Sat Jun 25 11:30:40 2016 (r302194) > @@ -850,9 +850,12 @@ mutex_self_trylock(struct pthread_mutex > > switch (PMUTEX_TYPE(m->m_flags)) { > case PTHREAD_MUTEX_ERRORCHECK: > - case PTHREAD_MUTEX_NORMAL: > case PTHREAD_MUTEX_ADAPTIVE_NP: > - ret = EBUSY; > + ret = EDEADLK; > + break; > + > + case PTHREAD_MUTEX_NORMAL: > + ret = EBUSY; > break; > > case PTHREAD_MUTEX_RECURSIVE: I think POSIX (SUSv4tc1, XSH 3 pthread_mutex_lock) is clear that only pthread_mutex_lock() can fail with [EDEADLK], not pthread_mutex_trylock(). Instead, the error [EBUSY] listed for pthread_mutex_trylock() applies whenever the mutex could not be acquired because it was already locked. This includes the case where the mutex is owned by the current thread. Note that POSIX intends to allow not storing the owning thread's ID in non-recursive non-robust mutexes. Failing pthread_mutex_trylock() on owned mutexes only with [EBUSY] also matches our code before this commit and NetBSD's code, and is apparently expected by other code. Therefore, I think this commit should be reverted. -- Jilles Tjoelker