render / rpms / libvirt

Forked from rpms/libvirt 9 months ago
Clone
43fe83
From aaffe43897ee06be10aca64861022dfeea735ed3 Mon Sep 17 00:00:00 2001
43fe83
Message-Id: <aaffe43897ee06be10aca64861022dfeea735ed3.1382534060.git.jdenemar@redhat.com>
43fe83
From: Peter Krempa <pkrempa@redhat.com>
43fe83
Date: Thu, 10 Oct 2013 13:56:29 +0200
43fe83
Subject: [PATCH] qemu_process: Make qemuProcessReadLog() more versatile and
43fe83
 reusable
43fe83
43fe83
https://bugzilla.redhat.com/show_bug.cgi?id=1001738
43fe83
43fe83
Teach the function to skip character device definitions printed by qemu
43fe83
at startup in addition to libvirt log messages and make it usable from
43fe83
outside of qemu_process.c. Also add documentation about the func.
43fe83
43fe83
(cherry picked from commit 310651a5e346b23db9015061452b1887335aed67)
43fe83
43fe83
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
43fe83
---
43fe83
 src/qemu/qemu_process.c | 24 +++++++++++++++++++-----
43fe83
 src/qemu/qemu_process.h |  2 ++
43fe83
 2 files changed, 21 insertions(+), 5 deletions(-)
43fe83
43fe83
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
43fe83
index 1bd0d04..063cd78 100644
43fe83
--- a/src/qemu/qemu_process.c
43fe83
+++ b/src/qemu/qemu_process.c
43fe83
@@ -1428,8 +1428,20 @@ error:
43fe83
     return ret;
43fe83
 }
43fe83
 
43fe83
-static int
43fe83
-qemuProcessReadLog(int fd, char *buf, int buflen, int off)
43fe83
+
43fe83
+/**
43fe83
+ * qemuProcessReadLog: Read log file of a qemu VM
43fe83
+ * @fd: File descriptor of the log file
43fe83
+ * @buf: buffer to store the read messages
43fe83
+ * @buflen: allocated space available in @buf
43fe83
+ * @off: Offset to start reading from
43fe83
+ * @skipchar: Skip messages about created character devices
43fe83
+ *
43fe83
+ * Reads log of a qemu VM. Skips messages not produced by qemu or irrelevant
43fe83
+ * messages. Returns length of the message stored in @buf, or -1 on error.
43fe83
+ */
43fe83
+int
43fe83
+qemuProcessReadLog(int fd, char *buf, int buflen, int off, bool skipchar)
43fe83
 {
43fe83
     char *filter_next = buf;
43fe83
     ssize_t bytes;
43fe83
@@ -1450,7 +1462,9 @@ qemuProcessReadLog(int fd, char *buf, int buflen, int off)
43fe83
         /* Filter out debug messages from intermediate libvirt process */
43fe83
         while ((eol = strchr(filter_next, '\n'))) {
43fe83
             *eol = '\0';
43fe83
-            if (virLogProbablyLogMessage(filter_next)) {
43fe83
+            if (virLogProbablyLogMessage(filter_next) ||
43fe83
+                (skipchar &&
43fe83
+                 STRPREFIX(filter_next, "char device redirected to"))) {
43fe83
                 memmove(filter_next, eol + 1, off - (eol - buf));
43fe83
                 off -= eol + 1 - filter_next;
43fe83
             } else {
43fe83
@@ -1493,7 +1507,7 @@ qemuProcessReadLogOutput(virDomainObjPtr vm,
43fe83
 
43fe83
         isdead = kill(vm->pid, 0) == -1 && errno == ESRCH;
43fe83
 
43fe83
-        got = qemuProcessReadLog(fd, buf, buflen, got);
43fe83
+        got = qemuProcessReadLog(fd, buf, buflen, got, false);
43fe83
         if (got < 0) {
43fe83
             virReportSystemError(errno,
43fe83
                                  _("Failure while reading %s log output"),
43fe83
@@ -1804,7 +1818,7 @@ cleanup:
43fe83
         }
43fe83
 
43fe83
         len = strlen(buf);
43fe83
-        qemuProcessReadLog(logfd, buf + len, buf_size - len - 1, 0);
43fe83
+        qemuProcessReadLog(logfd, buf + len, buf_size - len - 1, 0, true);
43fe83
         virReportError(VIR_ERR_INTERNAL_ERROR,
43fe83
                        _("process exited while connecting to monitor: %s"),
43fe83
                        buf);
43fe83
diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h
43fe83
index 8c81e40..2f6c4f5 100644
43fe83
--- a/src/qemu/qemu_process.h
43fe83
+++ b/src/qemu/qemu_process.h
43fe83
@@ -101,4 +101,6 @@ bool qemuProcessAutoDestroyActive(virQEMUDriverPtr driver,
43fe83
 virBitmapPtr qemuPrepareCpumap(virQEMUDriverPtr driver,
43fe83
                                virBitmapPtr nodemask);
43fe83
 
43fe83
+int qemuProcessReadLog(int fd, char *buf, int buflen, int off, bool skipchar);
43fe83
+
43fe83
 #endif /* __QEMU_PROCESS_H__ */
43fe83
-- 
43fe83
1.8.4
43fe83