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>
This commit is contained in:
Greg Kurz 2021-03-12 10:22:08 +01:00 committed by Michael S. Tsirkin
parent 9e06080bed
commit de62e49460

View File

@ -1392,6 +1392,13 @@ static int vhost_user_slave_handle_vring_host_notifier(struct vhost_dev *dev,
return 0; 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) static void slave_read(void *opaque)
{ {
struct vhost_dev *dev = opaque; struct vhost_dev *dev = opaque;
@ -1507,9 +1514,7 @@ static void slave_read(void *opaque)
goto fdcleanup; goto fdcleanup;
err: err:
qemu_set_fd_handler(u->slave_fd, NULL, NULL, NULL); close_slave_channel(u);
close(u->slave_fd);
u->slave_fd = -1;
fdcleanup: fdcleanup:
for (i = 0; i < fdsize; i++) { for (i = 0; i < fdsize; i++) {
@ -1560,9 +1565,7 @@ static int vhost_setup_slave_channel(struct vhost_dev *dev)
out: out:
close(sv[1]); close(sv[1]);
if (ret) { if (ret) {
qemu_set_fd_handler(u->slave_fd, NULL, NULL, NULL); close_slave_channel(u);
close(u->slave_fd);
u->slave_fd = -1;
} }
return ret; return ret;
@ -1915,9 +1918,7 @@ static int vhost_user_backend_cleanup(struct vhost_dev *dev)
u->postcopy_fd.handler = NULL; u->postcopy_fd.handler = NULL;
} }
if (u->slave_fd >= 0) { if (u->slave_fd >= 0) {
qemu_set_fd_handler(u->slave_fd, NULL, NULL, NULL); close_slave_channel(u);
close(u->slave_fd);
u->slave_fd = -1;
} }
g_free(u->region_rb); g_free(u->region_rb);
u->region_rb = NULL; u->region_rb = NULL;