From 327993f180e22f7f18b8693bd2381b74b1f971a6 Mon Sep 17 00:00:00 2001 From: Roman Penyaev Date: Mon, 14 Oct 2024 17:24:07 +0200 Subject: chardev/mux: implement detach of frontends from mux MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit With bitset management now it becomes feasible to implement the logic of detaching frontends from multiplexer. Signed-off-by: Roman Penyaev Cc: "Marc-André Lureau" Cc: qemu-devel@nongnu.org Reviewed-by: Marc-André Lureau Message-ID: <20241014152408.427700-8-r.peniaev@gmail.com> --- chardev/char-mux.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'chardev/char-mux.c') diff --git a/chardev/char-mux.c b/chardev/char-mux.c index 4fc619b2da..bda5c45e60 100644 --- a/chardev/char-mux.c +++ b/chardev/char-mux.c @@ -290,10 +290,10 @@ static void char_mux_finalize(Object *obj) bit = -1; while ((bit = find_next_bit(&d->mux_bitset, MAX_MUX, bit + 1)) < MAX_MUX) { CharBackend *be = d->backends[bit]; - if (be) { - be->chr = NULL; - } + be->chr = NULL; + d->backends[bit] = NULL; } + d->mux_bitset = 0; qemu_chr_fe_deinit(&d->chr, false); } @@ -332,6 +332,21 @@ bool mux_chr_attach_frontend(MuxChardev *d, CharBackend *b, return true; } +bool mux_chr_detach_frontend(MuxChardev *d, unsigned int tag) +{ + unsigned int bit; + + bit = find_next_bit(&d->mux_bitset, MAX_MUX, tag); + if (bit != tag) { + return false; + } + + d->mux_bitset &= ~(1 << bit); + d->backends[bit] = NULL; + + return true; +} + void mux_set_focus(Chardev *chr, unsigned int focus) { MuxChardev *d = MUX_CHARDEV(chr); -- cgit 1.4.1