From 1019bf1445318ab94481b4fabe736be9e77946f2 Mon Sep 17 00:00:00 2001 From: John Ferlan Date: Tue, 15 Mar 2016 07:15:30 -0400 Subject: [PATCH] qemu: Move last error save/restore to qemuBuildNetCommandLine Commit 'ef2ab8fd' moved just the virDomainConfNWFilterTeardown and left the logic to save/restore the current error essentially doing nothing in the error path for qemuBuildCommandLine. So move it to where it was meant to be. Although the original code would reset the filter on command creation errors after building the network command portion and commit 'ef2ab8fd' altered that logic, the teardown is called during qemuProcessStop from virDomainConfVMNWFilterTeardown and that code has the save/restore last error logic, so just allow that code to handle the teardown rather than running it twice. The qemuProcessStop would be called in the failure path of qemuBuildCommandLine. --- src/qemu/qemu_command.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index b18e425774..3e7f1fe3dd 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -8024,6 +8024,7 @@ qemuBuildNetCommandLine(virCommandPtr cmd, { size_t i; int last_good_net = -1; + virErrorPtr originalError = NULL; if (!def->nnets) { /* If we have -device, then we set -nodefault already */ @@ -8077,8 +8078,13 @@ qemuBuildNetCommandLine(virCommandPtr cmd, return 0; error: + /* free up any resources in the network driver + * but don't overwrite the original error */ + originalError = virSaveLastError(); for (i = 0; last_good_net != -1 && i <= last_good_net; i++) virDomainConfNWFilterTeardown(def->nets[i]); + virSetError(originalError); + virFreeError(originalError); return -1; } @@ -9171,7 +9177,6 @@ qemuBuildCommandLine(virConnectPtr conn, const char *domainLibDir, const char *domainChannelTargetDir) { - virErrorPtr originalError = NULL; size_t i; char uuid[VIR_UUID_STRING_BUFLEN]; virCommandPtr cmd = NULL; @@ -9407,11 +9412,6 @@ qemuBuildCommandLine(virConnectPtr conn, error: virObjectUnref(cfg); - /* free up any resources in the network driver - * but don't overwrite the original error */ - originalError = virSaveLastError(); - virSetError(originalError); - virFreeError(originalError); virCommandFree(cmd); return NULL; } -- GitLab