]> xenbits.xensource.com Git - libvirt.git/commitdiff
Fri Feb 20 17:49:22 IST 2007 Mark McLoughlin <markmc@redhat.com>
authorMark McLoughlin <markmc@redhat.com>
Tue, 20 Feb 2007 17:51:41 +0000 (17:51 +0000)
committerMark McLoughlin <markmc@redhat.com>
Tue, 20 Feb 2007 17:51:41 +0000 (17:51 +0000)
        Fix a few leaks

        * qemud/qemud.c: qemudCleanup(): free the socket
        structures

        * qemud/conf.c: fix various leaks in the xml parsing

        * qemud/iptables.c: fix a typo causing a leak

ChangeLog
include/libvirt/libvirt.h
qemud/conf.c
qemud/iptables.c
qemud/qemud.c

index 47983c80ea1fa093585e6c87c8d39fb590c089cb..308a8c634010ed3e34bc18d25a8e6d1b381cc5c2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+Fri Feb 20 17:49:22 IST 2007 Mark McLoughlin <markmc@redhat.com>
+
+       Fix a few leaks
+
+       * qemud/qemud.c: qemudCleanup(): free the socket
+       structures
+
+       * qemud/conf.c: fix various leaks in the xml parsing
+
+       * qemud/iptables.c: fix a typo causing a leak
+       
 Fri Feb 20 16:49:53 IST 2007 Mark McLoughlin <markmc@redhat.com>
 
        * qemud/conf.c, qemud/qemud.c: only create config dirs
index ee28d7f09a05b2ee3b351c6d4072c9c842e3e9a2..ce24f59fc03dad5554eb32f138c508ea43dafe2b 100644 (file)
@@ -328,6 +328,11 @@ int                        virConnectListDefinedDomains (virConnectPtr conn,
                                                 int maxnames);
 int                    virDomainCreate         (virDomainPtr domain);
 
+int                    virDomainGetAutostart   (virDomainPtr domain,
+                                                int *autostart);
+int                    virDomainSetAutostart   (virDomainPtr domain,
+                                                int autostart);
+
 /**
  * virVcpuInfo: structure for information about a virtual CPU in a domain.
  */
@@ -528,6 +533,11 @@ char *                     virNetworkGetXMLDesc    (virNetworkPtr network,
                                                 int flags);
 char *                 virNetworkGetBridgeName (virNetworkPtr network);
 
+int                    virNetworkGetAutostart  (virNetworkPtr network,
+                                                int *autostart);
+int                    virNetworkSetAutostart  (virNetworkPtr network,
+                                                int autostart);
+
 #ifdef __cplusplus
 }
 #endif
index b4f76f0893368fe4eab263939ae9915d8f81c1a1..71474302d4fa1e523aa7e05b1dd7ca2cce677cf4 100644 (file)
@@ -651,6 +651,7 @@ static struct qemud_vm_def *qemudParseXML(struct qemud_server *server,
         (obj->nodesetval != NULL) && (obj->nodesetval->nodeNr == 1)) {
         def->features |= QEMUD_FEATURE_ACPI;
     }
+    xmlXPathFreeObject(obj);
 
     /* Extract OS type info */
     obj = xmlXPathEval(BAD_CAST "string(/domain/os/type[1])", ctxt);
@@ -794,8 +795,7 @@ static struct qemud_vm_def *qemudParseXML(struct qemud_server *server,
     if ((obj == NULL) || (obj->type != XPATH_NODESET) ||
         (obj->nodesetval == NULL) || (obj->nodesetval->nodeNr == 0)) {
         def->graphicsType = QEMUD_GRAPHICS_NONE;
-    } else {
-        prop = xmlGetProp(obj->nodesetval->nodeTab[0], BAD_CAST "type");
+    } else if ((prop = xmlGetProp(obj->nodesetval->nodeTab[0], BAD_CAST "type"))) {
         if (!strcmp((char *)prop, "vnc")) {
             def->graphicsType = QEMUD_GRAPHICS_VNC;
             prop = xmlGetProp(obj->nodesetval->nodeTab[0], BAD_CAST "port");
@@ -811,7 +811,9 @@ static struct qemud_vm_def *qemudParseXML(struct qemud_server *server,
             qemudReportError(server, VIR_ERR_INTERNAL_ERROR, "Unsupported graphics type %s", prop);
             goto error;
         }
+        xmlFree(prop);
     }
+    xmlXPathFreeObject(obj);
 
     /* analysis of the disk devices */
     obj = xmlXPathEval(BAD_CAST "/domain/devices/disk", ctxt);
index bd7c9cf6cc9399a9fdcad9a9ec91adb9ea33f930..366b2dee0ce2109b9c0102df95eeaac976eea6ef 100644 (file)
@@ -231,8 +231,8 @@ static void
 iptRulesFree(iptRules *rules)
 {
     if (rules->table) {
-        free(rules->chain);
-        rules->chain = NULL;
+        free(rules->table);
+        rules->table = NULL;
     }
 
     if (rules->chain) {
index 79ce4db92884edc566250970c9ad0ebe92b51857..1715d6f987f542e7d9bf953b3b7e5ba571fb6538 100644 (file)
@@ -1483,16 +1483,23 @@ static int qemudRunLoop(struct qemud_server *server, int timeout) {
 }
 
 static void qemudCleanup(struct qemud_server *server) {
-    struct qemud_socket *sock = server->sockets;
+    struct qemud_socket *sock;
+
     close(server->sigread);
+
+    sock = server->sockets;
     while (sock) {
+        struct qemud_socket *next = sock->next;
         close(sock->fd);
-        sock = sock->next;
+        free(sock);
+        sock = next;
     }
+
     if (server->brctl)
         brShutdown(server->brctl);
     if (server->iptables)
         iptablesContextFree(server->iptables);
+
     free(server);
 }