diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2011-09-19 14:33:23 +0200 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2011-12-22 11:53:59 +0100 |
commit | 1743b515860ef645b285908ee367c5e343e0020c (patch) | |
tree | e3e4b075df3892869bce293affd2d6dbb5dca40b /qemu-nbd.c | |
parent | a61c67828dea7c64edaf226cadb45b4ffcc1d411 (diff) |
qemu-nbd: move client handling to nbd.c
This patch sets up the fd handler in nbd.c instead of qemu-nbd.c. It
introduces NBDClient, which wraps the arguments to nbd_trip in a single
structure, so that we can add a notifier to it. This way, qemu-nbd can
know about disconnections.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'qemu-nbd.c')
-rw-r--r-- | qemu-nbd.c | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/qemu-nbd.c b/qemu-nbd.c index 347c776ab9..155b05840b 100644 --- a/qemu-nbd.c +++ b/qemu-nbd.c @@ -249,15 +249,10 @@ static int nbd_can_accept(void *opaque) return nb_fds < shared; } -static void nbd_read(void *opaque) +static void nbd_client_closed(NBDClient *client) { - int fd = (uintptr_t) opaque; - - if (nbd_trip(exp, fd) != 0) { - qemu_set_fd_handler2(fd, NULL, NULL, NULL, NULL); - close(fd); - nb_fds--; - } + nb_fds--; + qemu_notify_event(); } static void nbd_accept(void *opaque) @@ -268,8 +263,7 @@ static void nbd_accept(void *opaque) int fd = accept(server_fd, (struct sockaddr *)&addr, &addr_len); nbd_started = true; - if (fd != -1 && nbd_negotiate(exp, fd) != -1) { - qemu_set_fd_handler2(fd, NULL, nbd_read, NULL, (void *) (intptr_t) fd); + if (fd != -1 && nbd_client_new(exp, fd, nbd_client_closed)) { nb_fds++; } } |