]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemuBuildCommandLine: Don't overwrite errors with NWFilter's one
authorMichal Privoznik <mprivozn@redhat.com>
Wed, 24 Apr 2013 12:06:40 +0000 (14:06 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 25 Apr 2013 06:59:49 +0000 (08:59 +0200)
Currently, if there has been an error in building command line
process after virtual interfaces has been created, the flow jumps
to 'error' label, where virDomainConfNWFilterTeardown() is
called. This may report an error as well, but should not
overwrite the original cause why we jumped to 'error' label.

src/qemu/qemu_command.c

index 7245b27c185a126aa472900f34f88f6ef9c5ad94..235468e8fcac158a043d4cc9d0a55a5cca1aece4 100644 (file)
@@ -5903,6 +5903,7 @@ qemuBuildCommandLine(virConnectPtr conn,
                      virDomainSnapshotObjPtr snapshot,
                      enum virNetDevVPortProfileOp vmop)
 {
+    virErrorPtr originalError = NULL;
     int i, j;
     const char *emulator;
     char uuid[VIR_UUID_STRING_BUFLEN];
@@ -7833,13 +7834,16 @@ qemuBuildCommandLine(virConnectPtr conn,
     virObjectUnref(cfg);
     return cmd;
 
- no_memory:
+no_memory:
     virReportOOMError();
- error:
+error:
     virObjectUnref(cfg);
-    /* free up any resources in the network driver */
+    /* free up any resources in the network driver
+     * but don't overwrite the original error */
+    originalError = virSaveLastError();
     for (i = 0; i <= last_good_net; i++)
         virDomainConfNWFilterTeardown(def->nets[i]);
+    virSetError(originalError);
     virCommandFree(cmd);
     return NULL;
 }