[Libvir] PATCH: 8/10: Fix misc mem leaks

Daniel P. Berrange berrange at redhat.com
Thu Nov 29 17:35:12 UTC 2007


On Thu, Nov 29, 2007 at 05:28:07PM +0000, Richard W.M. Jones wrote:
> Daniel P. Berrange wrote:
> 
> All ACKed except:
> 
> >@@ -3808,20 +3808,13 @@ server_error (virConnectPtr conn, remote
> >     dom = err->dom ? get_nonnull_domain (conn, *err->dom) : NULL;
> >     net = err->net ? get_nonnull_network (conn, *err->net) : NULL;
> > 
> >-    /* These strings are nullable.  OK to ignore the return value
> >-     * of strdup since these strings are informational.
> >-     */
> >-    char *str1 = err->str1 ? strdup (*err->str1) : NULL;
> >-    char *str2 = err->str2 ? strdup (*err->str2) : NULL;
> >-    char *str3 = err->str3 ? strdup (*err->str3) : NULL;
> >-
> >-    char *message = err->message ? strdup (*err->message) : NULL;
> >-
> >     __virRaiseError (conn, dom, net,
> >                      err->domain, err->code, err->level,
> >-                     str1, str2, str3,
> >+                     err->str1 ? *err->str1 : NULL,
> >+                     err->str2 ? *err->str2 : NULL,
> >+                     err->str3 ? *err->str3 : NULL,
> >                      err->int1, err->int2,
> >-                     "%s", message);
> >+                     "%s", err->message ? *err->message : NULL);
> > }
> > 
> > /* get_nonnull_domain and get_nonnull_network turn an on-wire
> 
> Don't we need to dup these strings because the following xdr_free (in 
> the caller) will free them?

No, all the params to __virRaiseError, get strdup'd inside virRaiseError
before being stored in the virError object.

    /*
     * Save the information about the error
     */
    virResetError(to);
    to->conn = conn;
    to->dom = dom;
    to->net = net;
    to->domain = domain;
    to->code = code;
    to->message = str;
    to->level = level;
    if (str1 != NULL)
        to->str1 = strdup(str1);
    if (str2 != NULL)
        to->str2 = strdup(str2);
    if (str3 != NULL)
        to->str3 = strdup(str3);
    to->int1 = int1;
    to->int2 = int2;


And the 'msg' arg gets re-allocated as the va-args are procssed with
vsnprintf, so there's no need for the virRaiseError caller to strdup
stuff itself

Dan.
-- 
|=- Red Hat, Engineering, Emerging Technologies, Boston.  +1 978 392 2496 -=|
|=-           Perl modules: http://search.cpan.org/~danberr/              -=|
|=-               Projects: http://freshmeat.net/~danielpb/               -=|
|=-  GnuPG: 7D3B9505   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505  -=| 




More information about the libvir-list mailing list