]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Don't overwrite errors by closefd in error paths
authorJiri Denemark <jdenemar@redhat.com>
Wed, 13 Jul 2011 09:16:20 +0000 (11:16 +0200)
committerJiri Denemark <jdenemar@redhat.com>
Thu, 14 Jul 2011 14:10:17 +0000 (16:10 +0200)
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
src/qemu/qemu_monitor.h

index cff7220fb48dab8855af0846b5041776adf55856..3a30a157b3a0204b651b75882aee90677d2772d4 100644 (file)
@@ -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;
 }
 
index 893f3e9c156b0f83f61532446cf3f63c56899594..f246d21a085505a7b48ac732247902e519fd5fed 100644 (file)
@@ -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);