Date: Sun, 22 Nov 2009 22:07:51 +0000 From: Oliver Pinter <oliver.pntr@gmail.com> To: Attilio Rao <attilio@freebsd.org> Cc: svn-src-stable@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, svn-src-stable-8@freebsd.org Subject: Re: svn commit: r199652 - stable/8/sys/fs/fifofs Message-ID: <6101e8c40911221407w54fbac5bn590b8c21c37ced11@mail.gmail.com> In-Reply-To: <200911221609.nAMG9REa022880@svn.freebsd.org> References: <200911221609.nAMG9REa022880@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
this for 7-STABLE? On 11/22/09, Attilio Rao <attilio@freebsd.org> wrote: > Author: attilio > Date: Sun Nov 22 16:09:27 2009 > New Revision: 199652 > URL: http://svn.freebsd.org/changeset/base/199652 > > Log: > MFC r199007: > Fix a memory leak. > > Modified: > stable/8/sys/fs/fifofs/fifo_vnops.c > Directory Properties: > stable/8/sys/ (props changed) > stable/8/sys/amd64/include/xen/ (props changed) > stable/8/sys/cddl/contrib/opensolaris/ (props changed) > stable/8/sys/contrib/dev/acpica/ (props changed) > stable/8/sys/contrib/pf/ (props changed) > stable/8/sys/dev/xen/xenpci/ (props changed) > > Modified: stable/8/sys/fs/fifofs/fifo_vnops.c > ============================================================================== > --- stable/8/sys/fs/fifofs/fifo_vnops.c Sun Nov 22 16:04:49 2009 (r199651) > +++ stable/8/sys/fs/fifofs/fifo_vnops.c Sun Nov 22 16:09:27 2009 (r199652) > @@ -78,6 +78,10 @@ struct fileops fifo_ops_f = { > /* > * This structure is associated with the FIFO vnode and stores > * the state associated with the FIFO. > + * Notes about locking: > + * - fi_readsock and fi_writesock are invariant since init time. > + * - fi_readers and fi_writers are vnode lock protected. > + * - fi_wgen is fif_mtx lock protected. > */ > struct fifoinfo { > struct socket *fi_readsock; > @@ -215,14 +219,9 @@ fail1: > } > > /* > - * General access to fi_readers and fi_writers is protected using > - * the vnode lock. > - * > - * Protect the increment of fi_readers and fi_writers and the > - * associated calls to wakeup() with the fifo mutex in addition > - * to the vnode lock. This allows the vnode lock to be dropped > - * for the msleep() calls below, and using the fifo mutex with > - * msleep() prevents the wakeup from being missed. > + * Use the fifo_mtx lock here, in addition to the vnode lock, > + * in order to allow vnode lock dropping before msleep() calls > + * and still avoiding missed wakeups. > */ > mtx_lock(&fifo_mtx); > if (ap->a_mode & FREAD) { > @@ -241,6 +240,8 @@ fail1: > if (ap->a_mode & FWRITE) { > if ((ap->a_mode & O_NONBLOCK) && fip->fi_readers == 0) { > mtx_unlock(&fifo_mtx); > + if (fip->fi_writers == 0) > + fifo_cleanup(vp); > return (ENXIO); > } > fip->fi_writers++; > _______________________________________________ > svn-src-stable@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/svn-src-stable > To unsubscribe, send any mail to "svn-src-stable-unsubscribe@freebsd.org" >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6101e8c40911221407w54fbac5bn590b8c21c37ced11>