aboutsummaryrefslogtreecommitdiff
path: root/hw/virtio
diff options
context:
space:
mode:
authorGreg Kurz <groug@kaod.org>2021-03-12 10:22:08 +0100
committerMichael S. Tsirkin <mst@redhat.com>2021-03-22 10:17:53 -0400
commitde62e4946052076186428900a85d6547627e84c6 (patch)
treed2ffb1834eebabb7eca481e260b378e7305e7b9e /hw/virtio
parent9e06080bed293d94ec1f874e62f25f147b20bc6c (diff)
downloadqemu-de62e4946052076186428900a85d6547627e84c6.zip
qemu-de62e4946052076186428900a85d6547627e84c6.tar.gz
qemu-de62e4946052076186428900a85d6547627e84c6.tar.bz2
vhost-user: Factor out duplicated slave_fd teardown code
Signed-off-by: Greg Kurz <groug@kaod.org> Message-Id: <20210312092212.782255-4-groug@kaod.org> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'hw/virtio')
-rw-r--r--hw/virtio/vhost-user.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
index acde1d2..cb0c98f 100644
--- a/hw/virtio/vhost-user.c
+++ b/hw/virtio/vhost-user.c
@@ -1392,6 +1392,13 @@ static int vhost_user_slave_handle_vring_host_notifier(struct vhost_dev *dev,
return 0;
}
+static void close_slave_channel(struct vhost_user *u)
+{
+ qemu_set_fd_handler(u->slave_fd, NULL, NULL, NULL);
+ close(u->slave_fd);
+ u->slave_fd = -1;
+}
+
static void slave_read(void *opaque)
{
struct vhost_dev *dev = opaque;
@@ -1507,9 +1514,7 @@ static void slave_read(void *opaque)
goto fdcleanup;
err:
- qemu_set_fd_handler(u->slave_fd, NULL, NULL, NULL);
- close(u->slave_fd);
- u->slave_fd = -1;
+ close_slave_channel(u);
fdcleanup:
for (i = 0; i < fdsize; i++) {
@@ -1560,9 +1565,7 @@ static int vhost_setup_slave_channel(struct vhost_dev *dev)
out:
close(sv[1]);
if (ret) {
- qemu_set_fd_handler(u->slave_fd, NULL, NULL, NULL);
- close(u->slave_fd);
- u->slave_fd = -1;
+ close_slave_channel(u);
}
return ret;
@@ -1915,9 +1918,7 @@ static int vhost_user_backend_cleanup(struct vhost_dev *dev)
u->postcopy_fd.handler = NULL;
}
if (u->slave_fd >= 0) {
- qemu_set_fd_handler(u->slave_fd, NULL, NULL, NULL);
- close(u->slave_fd);
- u->slave_fd = -1;
+ close_slave_channel(u);
}
g_free(u->region_rb);
u->region_rb = NULL;