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

Reply via email to