From c3fd09f7b773f0d8ab7d29ed6da6e02c3e65a0aa Mon Sep 17 00:00:00 2001 From: Jiri Denemark Date: Wed, 13 Jul 2011 11:16:20 +0200 Subject: [PATCH] qemu: Don't overwrite errors by closefd in error paths When qemuMonitorCloseFileHandle is called in error path, we need to preserve the original error since a possible further error when running closefd monitor command is not very useful to users. --- src/qemu/qemu_monitor.c | 14 ++++++++++++-- src/qemu/qemu_monitor.h | 3 +++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index cff7220fb4..3a30a157b3 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -1964,20 +1964,30 @@ int qemuMonitorSendFileHandle(qemuMonitorPtr mon, int qemuMonitorCloseFileHandle(qemuMonitorPtr mon, const char *fdname) { - int ret; + int ret = -1; + virErrorPtr error; + VIR_DEBUG("mon=%p fdname=%s", mon, fdname); + error = virSaveLastError(); + if (!mon) { qemuReportError(VIR_ERR_INVALID_ARG, "%s", _("monitor must not be NULL")); - return -1; + goto cleanup; } if (mon->json) ret = qemuMonitorJSONCloseFileHandle(mon, fdname); else ret = qemuMonitorTextCloseFileHandle(mon, fdname); + +cleanup: + if (error) { + virSetError(error); + virFreeError(error); + } return ret; } diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 893f3e9c15..f246d21a08 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -362,6 +362,9 @@ int qemuMonitorSendFileHandle(qemuMonitorPtr mon, const char *fdname, int fd); +/* The function preserves previous error and only sets it's own error if no + * error was set before. + */ int qemuMonitorCloseFileHandle(qemuMonitorPtr mon, const char *fdname);