diff --git a/include/char/char.h b/include/char/char.h index a726ddc011..32c9999113 100644 --- a/include/char/char.h +++ b/include/char/char.h @@ -68,8 +68,7 @@ struct CharDriverState { void (*chr_close)(struct CharDriverState *chr); void (*chr_accept_input)(struct CharDriverState *chr); void (*chr_set_echo)(struct CharDriverState *chr, bool echo); - void (*chr_guest_open)(struct CharDriverState *chr); - void (*chr_guest_close)(struct CharDriverState *chr); + void (*chr_set_fe_open)(struct CharDriverState *chr, int fe_open); void *opaque; int idle_tag; char *label; diff --git a/qemu-char.c b/qemu-char.c index 29a24628ed..bab2eb7a9a 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -514,8 +514,7 @@ static CharDriverState *qemu_chr_open_mux(CharDriverState *drv) chr->chr_update_read_handler = mux_chr_update_read_handler; chr->chr_accept_input = mux_chr_accept_input; /* Frontend guest-open / -close notification is not support with muxes */ - chr->chr_guest_open = NULL; - chr->chr_guest_close = NULL; + chr->chr_set_fe_open = NULL; /* Muxes are always open on creation */ qemu_chr_be_generic_open(chr); @@ -3425,11 +3424,8 @@ void qemu_chr_fe_set_open(struct CharDriverState *chr, int fe_open) return; } chr->fe_open = fe_open; - if (fe_open && chr->chr_guest_open) { - chr->chr_guest_open(chr); - } - if (!fe_open && chr->chr_guest_close) { - chr->chr_guest_close(chr); + if (chr->chr_set_fe_open) { + chr->chr_set_fe_open(chr, fe_open); } } diff --git a/spice-qemu-char.c b/spice-qemu-char.c index c39095b438..d249829624 100644 --- a/spice-qemu-char.c +++ b/spice-qemu-char.c @@ -176,16 +176,14 @@ static void spice_chr_close(struct CharDriverState *chr) g_free(s); } -static void spice_chr_guest_open(struct CharDriverState *chr) +static void spice_chr_set_fe_open(struct CharDriverState *chr, int fe_open) { SpiceCharDriver *s = chr->opaque; - vmc_register_interface(s); -} - -static void spice_chr_guest_close(struct CharDriverState *chr) -{ - SpiceCharDriver *s = chr->opaque; - vmc_unregister_interface(s); + if (fe_open) { + vmc_register_interface(s); + } else { + vmc_unregister_interface(s); + } } static void print_allowed_subtypes(void) @@ -218,8 +216,7 @@ static CharDriverState *chr_open(const char *subtype) chr->opaque = s; chr->chr_write = spice_chr_write; chr->chr_close = spice_chr_close; - chr->chr_guest_open = spice_chr_guest_open; - chr->chr_guest_close = spice_chr_guest_close; + chr->chr_set_fe_open = spice_chr_set_fe_open; QLIST_INSERT_HEAD(&spice_chars, s, next);