From: Daniel P. Berrange Date: Tue, 12 Apr 2016 15:48:19 +0000 (+0100) Subject: virt-login-shell: avoid loosing error during cleanup X-Git-Tag: v2.0.0-rc1~273 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1ebe6f24341f3f8a0f4d4f995ce12326f062119c;p=thirdparty%2Flibvirt.git virt-login-shell: avoid loosing error during cleanup The virDomainFree / virConnectClose methods will reset the last error handle, so we must save the error during cleanup Signed-off-by: Daniel P. Berrange --- diff --git a/tools/virt-login-shell.c b/tools/virt-login-shell.c index 527395a5d0..59ec801501 100644 --- a/tools/virt-login-shell.c +++ b/tools/virt-login-shell.c @@ -220,6 +220,7 @@ main(int argc, char **argv) size_t i; const char *cmdstr = NULL; char *tmp; + virErrorPtr saved_err = NULL; struct option opt[] = { {"help", no_argument, NULL, 'h'}, @@ -390,6 +391,8 @@ main(int argc, char **argv) /* At this point, the parent is now waiting for the child to exit, * but as that may take a long time, we release resources now. */ cleanup: + saved_err = virSaveLastError(); + if (nfdlist > 0) for (i = 0; i < nfdlist; i++) VIR_FORCE_CLOSE(fdlist[i]); @@ -410,7 +413,9 @@ main(int argc, char **argv) if (virProcessWait(cpid, &status, true) == 0) virProcessExitWithStatus(status); - if (virGetLastError()) + if (saved_err) { + virSetError(saved_err); virDispatchError(NULL); + } return ret; }