Hi Eric On Tue, Dec 9, 2025 at 5:18 AM Eric K <[email protected]> wrote: > > This patch removes the `*be_opened = false` override for the UDP chardev > backend. Since UDP is connectionless it never sends a `CHR_EVENT_OPENED` > so it is never marked open. This causes some frontends (e.g. virtio-serial) > to never perform any operations on the socket. > > Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2993 > Signed-off-by: Eric K <[email protected]>
UDP is connection-less, so it will not be notified when a client is ready to receive. If we make the chardev always open, the device may send data too early though. At the same time, a chardev that only reads isn't very useful. I don't think we need to introduce a property for the change of behaviour. Reviewed-by: Marc-André Lureau <[email protected]> > --- > chardev/char-udp.c | 2 -- > tests/unit/test-char.c | 2 ++ > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/chardev/char-udp.c b/chardev/char-udp.c > index 572fab0ad1..1025f577a0 100644 > --- a/chardev/char-udp.c > +++ b/chardev/char-udp.c > @@ -215,8 +215,6 @@ static void qmp_chardev_open_udp(Chardev *chr, > g_free(name); > > s->ioc = QIO_CHANNEL(sioc); > - /* be isn't opened until we get a connection */ > - *be_opened = false; > } > > static void char_udp_class_init(ObjectClass *oc, const void *data) > diff --git a/tests/unit/test-char.c b/tests/unit/test-char.c > index 8a98e42cad..2869c4e09d 100644 > --- a/tests/unit/test-char.c > +++ b/tests/unit/test-char.c > @@ -1012,6 +1012,8 @@ static void char_udp_test_internal(Chardev *reuse_chr, > int sock) > qemu_chr_fe_init(fe, chr, &error_abort); > } > > + g_assert(chr->be_open); > + > d.chr = chr; > qemu_chr_fe_set_handlers(fe, socket_can_read_hello, socket_read_hello, > NULL, NULL, &d, NULL, true); > -- > 2.52.0 > > -- Marc-André Lureau
