]> git.proxmox.com Git - qemu.git/commit
nbd: do not leak nbd_trip coroutines when a connection is torn down
authorPaolo Bonzini <pbonzini@redhat.com>
Wed, 22 Aug 2012 16:45:12 +0000 (18:45 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 19 Sep 2012 13:26:28 +0000 (15:26 +0200)
commitff2b68aa70d10b7eae813b04e9a23723dbd89ebd
tree3ddaf5829ccd5d60a14345cf0d5d6c4981bf6d2d
parentce33967af74523685c7f911f6576c689728fcc81
nbd: do not leak nbd_trip coroutines when a connection is torn down

Because nbd_client_close removes the I/O handlers for the client
socket, there is no way that any suspended coroutines are restarted.
This will be a problem with the QEMU embedded NBD server, because
we will have a QMP command to forcibly close all connections with
the clients.

Instead, we can exploit the reference counting of NBDClients; shutdown the
client socket, which will make it readable and writeable.  Also call the
close callback, which will release the user's reference.  The coroutines
then will fail and exit cleanly, and release all remaining references,
until the last refcount finally triggers the closure of the client.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
nbd.c
nbd.h