See the previous patch for a longer description of the deadlock. Now that QIONetListener supports waiting for clients in the main loop AioContext, NBD can use that to ensure that the server can make progress even when a client is intentionally starving the GMainContext from any activity not tied to an AioContext.
Fixes: https://gitlab.com/qemu-project/qemu/-/issues/3169 Signed-off-by: Eric Blake <[email protected]> --- v2: new patch --- blockdev-nbd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blockdev-nbd.c b/blockdev-nbd.c index 1e3e634b87d..696474aea93 100644 --- a/blockdev-nbd.c +++ b/blockdev-nbd.c @@ -94,10 +94,10 @@ static void nbd_update_server_watch(NBDServerData *s) { if (s->listener) { if (!s->max_connections || s->connections < s->max_connections) { - qio_net_listener_set_client_func(s->listener, nbd_accept, NULL, + qio_net_listener_set_client_aio_func(s->listener, nbd_accept, NULL, NULL); } else { - qio_net_listener_set_client_func(s->listener, NULL, NULL, NULL); + qio_net_listener_set_client_aio_func(s->listener, NULL, NULL, NULL); } } } -- 2.51.1
