[libvirt] [PATCH v2] qemu: Move last error save/restore to qemuBuildNetCommandLine

John Ferlan jferlan at redhat.com
Tue Mar 15 11:40:01 UTC 2016



On 03/15/2016 07:36 AM, John Ferlan wrote:
> 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.
> 
> Signed-off-by: John Ferlan <jferlan at redhat.com>
> ---
> v1:
> http://www.redhat.com/archives/libvir-list/2016-March/msg00566.html
> 
> Changes - just move the save/restore error logic from mainline to the
> BuildNetCommandLine function where it's used.
> 
>  src/qemu/qemu_command.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index b18e425..954f802 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -8077,8 +8077,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;
>  }
>  
> @@ -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;
>  }
> 


<sigh> forgot to save/merge my necessary local branch change:

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 954f802..3e7f1fe 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 */
@@ -9176,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;




More information about the libvir-list mailing list