qemu_chr_add_handlers*() have been removed in previous change, so the common qemu_chr_set_handlers() is no longer needed.
Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> --- qemu-char.c | 78 ++++++++++++++++++++++----------------------------- include/sysemu/char.h | 3 +- 2 files changed, 35 insertions(+), 46 deletions(-) diff --git a/qemu-char.c b/qemu-char.c index b10db09..1ed69d0 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -467,46 +467,6 @@ void qemu_chr_fe_printf(CharBackend *be, const char *fmt, ...) } static void remove_fd_in_watch(CharDriverState *chr); - -static void -qemu_chr_set_handlers(CharBackend *be, - IOCanReadHandler *fd_can_read, - IOReadHandler *fd_read, - IOEventHandler *fd_event, - void *opaque, - GMainContext *context) -{ - CharDriverState *s = be->chr; - int fe_open; - - if (!opaque && !fd_can_read && !fd_read && !fd_event) { - fe_open = 0; - remove_fd_in_watch(s); - } else { - fe_open = 1; - } - s->chr_can_read = fd_can_read; - s->chr_read = fd_read; - s->chr_event = fd_event; - s->handler_opaque = opaque; - if (s->chr_update_read_handler) { - s->chr_update_read_handler(s, context, be->tag); - } - - if (!s->explicit_fe_open) { - qemu_chr_fe_set_open(be, fe_open); - } - - /* We're connecting to an already opened device, so let's make sure we - also get the open event */ - if (fe_open) { - qemu_chr_fe_take_focus(be); - if (s->be_open) { - qemu_chr_be_generic_open(s); - } - } -} - static int mux_chr_new_handler_tag(CharDriverState *chr, Error **errp); static void mux_chr_set_handlers(CharDriverState *chr, GMainContext *context); static void mux_set_focus(MuxDriver *d, int focus); @@ -936,17 +896,45 @@ void qemu_chr_fe_set_handlers(CharBackend *b, void *opaque, GMainContext *context) { + CharDriverState *s; + int fe_open; + assert(b); - if (!b->chr) { + s = b->chr; + if (!s) { return; } - qemu_chr_set_handlers(b, fd_can_read, fd_read, - fd_event, opaque, context); + if (!opaque && !fd_can_read && !fd_read && !fd_event) { + fe_open = 0; + remove_fd_in_watch(s); + } else { + fe_open = 1; + } + s->chr_can_read = fd_can_read; + s->chr_read = fd_read; + s->chr_event = fd_event; + s->handler_opaque = opaque; + if (s->chr_update_read_handler) { + s->chr_update_read_handler(s, context, b->tag); + } + + if (!s->explicit_fe_open) { + qemu_chr_fe_set_open(b, fe_open); + } - if (b->chr->is_mux) { - mux_chr_set_handlers(b->chr, context); + if (fe_open) { + qemu_chr_fe_take_focus(b); + /* We're connecting to an already opened device, so let's make sure we + also get the open event */ + if (s->be_open) { + qemu_chr_be_generic_open(s); + } + } + + if (s->is_mux) { + mux_chr_set_handlers(s, context); } } diff --git a/include/sysemu/char.h b/include/sysemu/char.h index 0bd7506..6737a8a 100644 --- a/include/sysemu/char.h +++ b/include/sysemu/char.h @@ -460,7 +460,8 @@ CharDriverState *qemu_chr_fe_get_driver(CharBackend *be); * @opaque: an opaque pointer for the callbacks * @context: a main loop context or NULL for the default * - * Set the front end char handlers. + * Set the front end char handlers. The front end takes the focus if + * any of the handler is non-NULL. */ void qemu_chr_fe_set_handlers(CharBackend *b, IOCanReadHandler *fd_can_read, -- 2.10.0