From owner-cvs-all Fri Mar 14 11:31: 4 2003 Delivered-To: cvs-all@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 4B4E237B404 for ; Fri, 14 Mar 2003 11:31:01 -0800 (PST) Received: from mail.speakeasy.net (mail13.speakeasy.net [216.254.0.213]) by mx1.FreeBSD.org (Postfix) with ESMTP id DCF6543FBD for ; Fri, 14 Mar 2003 11:30:57 -0800 (PST) (envelope-from jhb@FreeBSD.org) Received: (qmail 17420 invoked from network); 14 Mar 2003 19:31:02 -0000 Received: from unknown (HELO server.baldwin.cx) ([216.27.160.63]) (envelope-sender ) by mail13.speakeasy.net (qmail-ldap-1.03) with DES-CBC3-SHA encrypted SMTP for ; 14 Mar 2003 19:31:02 -0000 Received: from laptop.baldwin.cx (gw1.twc.weather.com [216.133.140.1]) by server.baldwin.cx (8.12.8/8.12.8) with ESMTP id h2EJUsOv053641; Fri, 14 Mar 2003 14:30:54 -0500 (EST) (envelope-from jhb@FreeBSD.org) Message-ID: X-Mailer: XFMail 1.5.2 on FreeBSD X-Priority: 3 (Normal) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 8bit MIME-Version: 1.0 In-Reply-To: Date: Fri, 14 Mar 2003 14:31:12 -0500 (EST) From: John Baldwin To: John Baldwin Subject: RE: cvs commit: src/lib/libpthread/thread thr_rwlock.c Cc: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org, David Xu Sender: owner-cvs-all@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG On 14-Mar-2003 John Baldwin wrote: > > On 14-Mar-2003 David Xu wrote: >> davidxu 2003/03/13 17:02:47 PST >> >> FreeBSD src repository >> >> Modified files: >> lib/libpthread/thread thr_rwlock.c >> Log: >> Fix a bug in rwlock. When a rwlock was locked by reader threads, a >> writter thread can block reader threads to get read lock. > > That's not a bug. That is a very common way of implementing reader > writer locks. The idea is that if a writer is waiting for the lock > you make later read requests wait for the lock so that they don't > starve the writer. This is how Solaris rw locks work for example. > The in-kernel sx locks don't currently work that way, but that > may change at some point in the future. For more discussion on why > Solaris chose this route, go find a copy of Solaris Internals. > > You probably should revert this and find out if this was an > intentional design decision rather than a "bug". Looking at the diff a bit more: @@ -157,7 +157,7 @@ return(ret); /* give writers priority over readers */ - while (prwlock->blocked_writers || prwlock->state < 0) { + while (prwlock->state < 0) { ret = pthread_cond_wait(&prwlock->read_signal, &prwlock->lock); if (ret != 0) { The comment above the while loop seems to indicate that this was indeed a design choice. As a result of this change the comment no longer applies. Please revert. -- John Baldwin <>< http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve!" - http://www.FreeBSD.org/ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe cvs-all" in the body of the message