From 92c754bcbdbc1321861067af1fd02e00fb2b092b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Sat, 25 Apr 2026 01:00:42 +0400 Subject: [PATCH] io/net-listener: move mutex init to instance_init MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The QIONetListener mutex is initialized in the convenience constructor qio_net_listener_new() rather than in an instance_init. This means a bare object_new(TYPE_QIO_NET_LISTENER) produces an object with an uninitialized mutex, but instance_finalize unconditionally calls qemu_mutex_destroy() on it, which aborts. Move the mutex initialization to a proper instance_init so that init and finalize are always paired regardless of how the object is created. Fixes: 9d86181874a ("qio: Protect NetListener callback with mutex") Cc: peterx@redhat.com Reviewed-by: Daniel P. Berrangé Reviewed-by: Peter Xu Signed-off-by: Marc-André Lureau --- io/net-listener.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/io/net-listener.c b/io/net-listener.c index 9410d72da9..1fd0f6cb5a 100644 --- a/io/net-listener.c +++ b/io/net-listener.c @@ -38,7 +38,6 @@ QIONetListener *qio_net_listener_new(void) QIONetListener *listener; listener = QIO_NET_LISTENER(object_new(TYPE_QIO_NET_LISTENER)); - qemu_mutex_init(&listener->lock); return listener; } @@ -440,6 +439,13 @@ qio_net_listener_get_local_address(QIONetListener *listener, size_t n, return qio_channel_socket_get_local_address(sioc, errp); } +static void qio_net_listener_instance_init(Object *obj) +{ + QIONetListener *listener = QIO_NET_LISTENER(obj); + + qemu_mutex_init(&listener->lock); +} + static void qio_net_listener_finalize(Object *obj) { QIONetListener *listener = QIO_NET_LISTENER(obj); @@ -463,6 +469,7 @@ static const TypeInfo qio_net_listener_info = { .parent = TYPE_OBJECT, .name = TYPE_QIO_NET_LISTENER, .instance_size = sizeof(QIONetListener), + .instance_init = qio_net_listener_instance_init, .instance_finalize = qio_net_listener_finalize, };