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>