From 448ba28f493820e91b65986901165cb28ff5fd78 Mon Sep 17 00:00:00 2001 Message-Id: <448ba28f493820e91b65986901165cb28ff5fd78.1354903384.git.crobinso@redhat.com> In-Reply-To: <9f0944a25bc1094fa7a74ac9df14e184e2c5c82d.1354903384.git.crobinso@redhat.com> References: <9f0944a25bc1094fa7a74ac9df14e184e2c5c82d.1354903384.git.crobinso@redhat.com> From: Amit Shah Date: Mon, 21 Mar 2011 20:32:58 +0100 Subject: [PATCH] iohandlers: Add enable/disable_write_fd_handler() functions These will be used to provide a cleaner API for the nonblocking case. Signed-off-by: Amit Shah Signed-off-by: Cole Robinson --- iohandler.c | 35 +++++++++++++++++++++++++++++++++++ main-loop.h | 3 +++ 2 files changed, 38 insertions(+) diff --git a/iohandler.c b/iohandler.c index 60460a6..6cf2cdd 100644 --- a/iohandler.c +++ b/iohandler.c @@ -46,6 +46,41 @@ typedef struct IOHandlerRecord { static QLIST_HEAD(, IOHandlerRecord) io_handlers = QLIST_HEAD_INITIALIZER(io_handlers); +static IOHandlerRecord *find_iohandler(int fd) +{ + IOHandlerRecord *ioh; + + QLIST_FOREACH(ioh, &io_handlers, next) { + if (ioh->fd == fd) { + return ioh; + } + } + return NULL; +} + +void enable_write_fd_handler(int fd, IOHandler *fd_write) +{ + IOHandlerRecord *ioh; + + ioh = find_iohandler(fd); + if (!ioh) { + return; + } + + ioh->fd_write = fd_write; +} + +void disable_write_fd_handler(int fd) +{ + IOHandlerRecord *ioh; + + ioh = find_iohandler(fd); + if (!ioh) { + return; + } + + ioh->fd_write = NULL; +} /* XXX: fd_read_poll should be suppressed, but an API change is necessary in the character devices to suppress fd_can_read(). */ diff --git a/main-loop.h b/main-loop.h index 326c742..883ad43 100644 --- a/main-loop.h +++ b/main-loop.h @@ -166,6 +166,9 @@ void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque); typedef void IOReadHandler(void *opaque, const uint8_t *buf, int size); typedef int IOCanReadHandler(void *opaque); +void enable_write_fd_handler(int fd, IOHandler *fd_write); +void disable_write_fd_handler(int fd); + /** * qemu_set_fd_handler2: Register a file descriptor with the main loop * -- 1.8.0