[libvirt] [PATCH] storage: Fix memory leak in error path

Jiri Denemark jdenemar at redhat.com
Wed Mar 6 11:59:08 UTC 2013


This also renames cleanup label as error since it is only used for error
path rather then being common for both success and error paths.
---
 src/storage/storage_backend_logical.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/storage/storage_backend_logical.c b/src/storage/storage_backend_logical.c
index bb709df..e3b3de4 100644
--- a/src/storage/storage_backend_logical.c
+++ b/src/storage/storage_backend_logical.c
@@ -741,10 +741,10 @@ virStorageBackendLogicalCreateVol(virConnectPtr conn,
         virCommandAddArg(cmd, pool->def->source.name);
 
     if (virCommandRun(cmd, NULL) < 0)
-        goto cleanup;
+        goto error;
 
     if ((fdret = virStorageBackendVolOpen(vol->target.path)) < 0)
-        goto cleanup;
+        goto error;
     fd = fdret;
 
     /* We can only chown/grp if root */
@@ -753,21 +753,21 @@ virStorageBackendLogicalCreateVol(virConnectPtr conn,
             virReportSystemError(errno,
                                  _("cannot set file owner '%s'"),
                                  vol->target.path);
-            goto cleanup;
+            goto error;
         }
     }
     if (fchmod(fd, vol->target.perms.mode) < 0) {
         virReportSystemError(errno,
                              _("cannot set file mode '%s'"),
                              vol->target.path);
-        goto cleanup;
+        goto error;
     }
 
     if (VIR_CLOSE(fd) < 0) {
         virReportSystemError(errno,
                              _("cannot close file '%s'"),
                              vol->target.path);
-        goto cleanup;
+        goto error;
     }
     fd = -1;
 
@@ -776,17 +776,18 @@ virStorageBackendLogicalCreateVol(virConnectPtr conn,
         virReportSystemError(errno,
                              _("cannot find newly created volume '%s'"),
                              vol->target.path);
-        goto cleanup;
+        goto error;
     }
 
     return 0;
 
- cleanup:
+ error:
     err = virSaveLastError();
     VIR_FORCE_CLOSE(fd);
     virStorageBackendLogicalDeleteVol(conn, pool, vol, 0);
     virCommandFree(cmd);
     virSetError(err);
+    virFreeError(err);
     return -1;
 }
 
-- 
1.8.1.5




More information about the libvir-list mailing list