mirror of https://gitee.com/openkylin/libvirt.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 <berrange@redhat.com>
This commit is contained in:
parent
730466081c
commit
1ebe6f2434
|
@ -220,6 +220,7 @@ main(int argc, char **argv)
|
||||||
size_t i;
|
size_t i;
|
||||||
const char *cmdstr = NULL;
|
const char *cmdstr = NULL;
|
||||||
char *tmp;
|
char *tmp;
|
||||||
|
virErrorPtr saved_err = NULL;
|
||||||
|
|
||||||
struct option opt[] = {
|
struct option opt[] = {
|
||||||
{"help", no_argument, NULL, 'h'},
|
{"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,
|
/* 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. */
|
* but as that may take a long time, we release resources now. */
|
||||||
cleanup:
|
cleanup:
|
||||||
|
saved_err = virSaveLastError();
|
||||||
|
|
||||||
if (nfdlist > 0)
|
if (nfdlist > 0)
|
||||||
for (i = 0; i < nfdlist; i++)
|
for (i = 0; i < nfdlist; i++)
|
||||||
VIR_FORCE_CLOSE(fdlist[i]);
|
VIR_FORCE_CLOSE(fdlist[i]);
|
||||||
|
@ -410,7 +413,9 @@ main(int argc, char **argv)
|
||||||
if (virProcessWait(cpid, &status, true) == 0)
|
if (virProcessWait(cpid, &status, true) == 0)
|
||||||
virProcessExitWithStatus(status);
|
virProcessExitWithStatus(status);
|
||||||
|
|
||||||
if (virGetLastError())
|
if (saved_err) {
|
||||||
|
virSetError(saved_err);
|
||||||
virDispatchError(NULL);
|
virDispatchError(NULL);
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue