Date: Fri, 14 Mar 2003 19:47:21 -0800 (PST) From: David Xu <davidxu@FreeBSD.org> To: John Baldwin <jhb@FreeBSD.org> Cc: 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: <200303150347.h2F3lLjK069888@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
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?200303150347.h2F3lLjK069888>
