mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:56:38 +00:00
io/net-listener: move mutex init to instance_init
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: 9d86181874 ("qio: Protect NetListener callback with mutex")
Cc: peterx@redhat.com
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit is contained in:
@@ -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,
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user