Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 17 Mar 2003 03:08:40 +1100
From:      Darren Reed <darrenr@reed.wattle.id.au>
To:        David Xu <davidxu@FreeBSD.org>
Cc:        John Baldwin <jhb@FreeBSD.org>, cvs-all@FreeBSD.org, cvs-src@FreeBSD.org, src-committers@FreeBSD.org
Subject:   Re: cvs commit: src/lib/libpthread/thread thr_rwlock.c
Message-ID:  <200303161608.DAA02164@avalon.reed.wattle.id.au>
In-Reply-To: <200303150347.h2F3lLjK069888@freefall.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
So what you're saying is this design prevents bad code being written.
And the problem is ?

In some email I received from David Xu, sie wrote:
> This design prevents a thread to get a reader lock recursively when
> there is a writter blocked on a rwlock.
> 
> 
> ----- Original Message ----- 
> From: "John Baldwin" <jhb@FreeBSD.org>
> To: "John Baldwin" <jhb@FreeBSD.org>
> Cc: <src-committers@FreeBSD.org>; <cvs-src@FreeBSD.org>; <cvs-all@FreeBSD.org>; "David Xu" <davidxu@FreeBSD.org>
> Sent: Saturday, March 15, 2003 3:31 AM
> Subject: RE: cvs commit: src/lib/libpthread/thread thr_rwlock.c
> 
> 
> > 
> > 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 <jhb@FreeBSD.org>  <><  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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200303161608.DAA02164>