From 1ebe6f24341f3f8a0f4d4f995ce12326f062119c Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Tue, 12 Apr 2016 16:48:19 +0100 Subject: [PATCH] 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 --- tools/virt-login-shell.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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; }