提交 1019bf14 编写于 作者: J John Ferlan

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.
上级 363b401f
...@@ -8024,6 +8024,7 @@ qemuBuildNetCommandLine(virCommandPtr cmd, ...@@ -8024,6 +8024,7 @@ qemuBuildNetCommandLine(virCommandPtr cmd,
{ {
size_t i; size_t i;
int last_good_net = -1; int last_good_net = -1;
virErrorPtr originalError = NULL;
if (!def->nnets) { if (!def->nnets) {
/* If we have -device, then we set -nodefault already */ /* If we have -device, then we set -nodefault already */
...@@ -8077,8 +8078,13 @@ qemuBuildNetCommandLine(virCommandPtr cmd, ...@@ -8077,8 +8078,13 @@ qemuBuildNetCommandLine(virCommandPtr cmd,
return 0; return 0;
error: 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++) for (i = 0; last_good_net != -1 && i <= last_good_net; i++)
virDomainConfNWFilterTeardown(def->nets[i]); virDomainConfNWFilterTeardown(def->nets[i]);
virSetError(originalError);
virFreeError(originalError);
return -1; return -1;
} }
...@@ -9171,7 +9177,6 @@ qemuBuildCommandLine(virConnectPtr conn, ...@@ -9171,7 +9177,6 @@ qemuBuildCommandLine(virConnectPtr conn,
const char *domainLibDir, const char *domainLibDir,
const char *domainChannelTargetDir) const char *domainChannelTargetDir)
{ {
virErrorPtr originalError = NULL;
size_t i; size_t i;
char uuid[VIR_UUID_STRING_BUFLEN]; char uuid[VIR_UUID_STRING_BUFLEN];
virCommandPtr cmd = NULL; virCommandPtr cmd = NULL;
...@@ -9407,11 +9412,6 @@ qemuBuildCommandLine(virConnectPtr conn, ...@@ -9407,11 +9412,6 @@ qemuBuildCommandLine(virConnectPtr conn,
error: error:
virObjectUnref(cfg); 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); virCommandFree(cmd);
return NULL; return NULL;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册