[libvirt] [PATCH] Fix a reference leak for node devices.

Dave Allan dallan at redhat.com
Fri Jun 25 21:43:36 UTC 2010


On Fri, Jun 25, 2010 at 03:36:39PM -0600, Eric Blake wrote:
> On 06/25/2010 03:22 PM, Chris Lalancette wrote:
> > There was one major, and a few minor bugs having to do with
> > the reference counting of node devices in daemon/remote.c
> > The major bug was that remoteDispatchNodeDeviceListCaps()
> > was completely failing to unreference node devices; this
> > would lead to many open file descriptors, which would eventually
> > fail.
> > 
> > The minor bugs were along the same lines, but were in rarely
> > used error paths.  Still, they should be corrected.
> > 
> > Signed-off-by: Chris Lalancette <clalance at redhat.com>
> > ---
> >  daemon/remote.c |    7 +++++++
> >  1 files changed, 7 insertions(+), 0 deletions(-)
> > 
> > diff --git a/daemon/remote.c b/daemon/remote.c
> > index 91faa9a..ec5f85b 100644
> > --- a/daemon/remote.c
> > +++ b/daemon/remote.c
> > @@ -5012,11 +5012,13 @@ remoteDispatchNodeDeviceGetParent (struct qemud_server *server ATTRIBUTE_UNUSED,
> >          /* remoteDispatchClientRequest will free this. */
> >          char **parent_p;
> >          if (VIR_ALLOC(parent_p) < 0) {
> > +            virNodeDeviceFree(dev);
> >              remoteDispatchOOMError(rerr);
> >              return -1;
> >          }
> 
> ACK.  But given the number of places where you had to duplicate this
> line insertion, would it be better to change all the return -1 into goto
> cleanup, where the cleanup: label guarantees this cleanup for all
> possible exit paths?

+1

Dave




More information about the libvir-list mailing list