qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 21/38] char: move front end handlers in CharBack


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH 21/38] char: move front end handlers in CharBackend
Date: Mon, 24 Oct 2016 15:40:02 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.3.0


On 22/10/2016 11:53, Marc-André Lureau wrote:
> -    if (chr->chr_can_read || chr->chr_read ||
> -        chr->chr_event || chr->handler_opaque) {
> +    if (chr->be) {
>          error_setg(errp, "Chardev '%s' is busy", id);

This doesn't work with the mux chardev.  To some extent a preexisting
bug, but made worse by this patch.  But it can be fixed easily:

diff --git a/qemu-char.c b/qemu-char.c
index b9330f3..6dd779f 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -915,6 +915,16 @@ unavailable:
     return false;
 }
 
+static bool qemu_chr_is_busy(CharDriverState *s)
+{
+    if (s->is_mux) {
+        MuxDriver *d = s->opaque;
+        return d->mux_cnt >= 0;
+    } else {
+        return s->be != NULL;
+    }
+}
+
 void qemu_chr_fe_deinit(CharBackend *b)
 {
     assert(b);
@@ -4807,7 +4817,7 @@ void qmp_chardev_remove(const char *id, Error **errp)
         error_setg(errp, "Chardev '%s' not found", id);
         return;
     }
-    if (chr->be) {
+    if (qemu_chr_is_busy(chr)) {
         error_setg(errp, "Chardev '%s' is busy", id);
         return;
     }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]