Add a get_iohandler() function instead of looking up the ioh twice in qemu_set_fd_handler2().
Signed-off-by: Amit Shah <amit.s...@redhat.com> --- vl.c | 44 ++++++++++++++++++++++++++------------------ 1 files changed, 26 insertions(+), 18 deletions(-) diff --git a/vl.c b/vl.c index 0292184..9e365f6 100644 --- a/vl.c +++ b/vl.c @@ -1022,6 +1022,17 @@ typedef struct IOHandlerRecord { static QLIST_HEAD(, IOHandlerRecord) io_handlers = QLIST_HEAD_INITIALIZER(io_handlers); +static IOHandlerRecord *get_iohandler(int fd) +{ + IOHandlerRecord *ioh; + + QLIST_FOREACH(ioh, &io_handlers, next) { + if (ioh->fd == fd) { + return ioh; + } + } + return NULL; +} /* XXX: fd_read_poll should be suppressed, but an API change is necessary in the character devices to suppress fd_can_read(). */ @@ -1033,28 +1044,25 @@ int qemu_set_fd_handler2(int fd, { IOHandlerRecord *ioh; - if (!fd_read && !fd_write) { - QLIST_FOREACH(ioh, &io_handlers, next) { - if (ioh->fd == fd) { - ioh->deleted = 1; - break; - } - } - } else { - QLIST_FOREACH(ioh, &io_handlers, next) { - if (ioh->fd == fd) - goto found; - } + ioh = get_iohandler(fd); + + if (ioh && !fd_read && !fd_write) { + ioh->deleted = 1; + return 0; + } + + if (!ioh) { ioh = qemu_mallocz(sizeof(IOHandlerRecord)); QLIST_INSERT_HEAD(&io_handlers, ioh, next); - found: + ioh->fd = fd; - ioh->fd_read_poll = fd_read_poll; - ioh->fd_read = fd_read; - ioh->fd_write = fd_write; - ioh->opaque = opaque; - ioh->deleted = 0; } + ioh->fd_read_poll = fd_read_poll; + ioh->fd_read = fd_read; + ioh->fd_write = fd_write; + ioh->opaque = opaque; + ioh->deleted = 0; + return 0; } -- 1.7.3.4