aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chardev/char.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/chardev/char.c b/chardev/char.c
index 6b85099c03..78553125d3 100644
--- a/chardev/char.c
+++ b/chardev/char.c
@@ -138,7 +138,20 @@ static int qemu_chr_write_buffer(Chardev *s,
}
}
if (*offset > 0) {
+ /*
+ * If some data was written by backend, we should
+ * only log what was actually written. This method
+ * may be invoked again to write the remaining
+ * method, thus we'll log the remainder at that time.
+ */
qemu_chr_write_log(s, buf, *offset);
+ } else if (res < 0) {
+ /*
+ * If a fatal error was reported by the backend,
+ * assume this method won't be invoked again with
+ * this buffer, so log it all right away.
+ */
+ qemu_chr_write_log(s, buf, len);
}
qemu_mutex_unlock(&s->chr_write_lock);