dcavalca / rpms / qemu

Forked from rpms/qemu a year ago
Clone

Blame 0027-iohandlers-Add-enable-disable_write_fd_handler-funct.patch

Hans de Goede 3f1f29
From 328ddb228ed9e5509b8418b1f34de6d6aff83d62 Mon Sep 17 00:00:00 2001
Hans de Goede 3f1f29
From: Amit Shah <amit.shah@redhat.com>
Hans de Goede 3f1f29
Date: Mon, 21 Mar 2011 20:32:58 +0100
Hans de Goede 3f1f29
Subject: [PATCH 27/35] iohandlers: Add enable/disable_write_fd_handler()
Hans de Goede 3f1f29
 functions
Hans de Goede 3f1f29
Hans de Goede 3f1f29
These will be used to provide a cleaner API for the nonblocking case.
Hans de Goede 3f1f29
Hans de Goede 3f1f29
Signed-off-by: Amit Shah <amit.shah@redhat.com>
Hans de Goede 3f1f29
---
Hans de Goede 3f1f29
 iohandler.c |   35 +++++++++++++++++++++++++++++++++++
Hans de Goede 3f1f29
 qemu-char.h |    3 +++
Hans de Goede 3f1f29
 2 files changed, 38 insertions(+), 0 deletions(-)
Hans de Goede 3f1f29
Hans de Goede 3f1f29
diff --git a/iohandler.c b/iohandler.c
Hans de Goede 3f1f29
index 2b82421..8e6628b 100644
Hans de Goede 3f1f29
--- a/iohandler.c
Hans de Goede 3f1f29
+++ b/iohandler.c
Hans de Goede 3f1f29
@@ -44,6 +44,41 @@ typedef struct IOHandlerRecord {
Hans de Goede 3f1f29
 static QLIST_HEAD(, IOHandlerRecord) io_handlers =
Hans de Goede 3f1f29
     QLIST_HEAD_INITIALIZER(io_handlers);
Hans de Goede 3f1f29
 
Hans de Goede 3f1f29
+static IOHandlerRecord *find_iohandler(int fd)
Hans de Goede 3f1f29
+{
Hans de Goede 3f1f29
+    IOHandlerRecord *ioh;
Hans de Goede 3f1f29
+
Hans de Goede 3f1f29
+    QLIST_FOREACH(ioh, &io_handlers, next) {
Hans de Goede 3f1f29
+        if (ioh->fd == fd) {
Hans de Goede 3f1f29
+            return ioh;
Hans de Goede 3f1f29
+        }
Hans de Goede 3f1f29
+    }
Hans de Goede 3f1f29
+    return NULL;
Hans de Goede 3f1f29
+}
Hans de Goede 3f1f29
+
Hans de Goede 3f1f29
+void enable_write_fd_handler(int fd, IOHandler *fd_write)
Hans de Goede 3f1f29
+{
Hans de Goede 3f1f29
+    IOHandlerRecord *ioh;
Hans de Goede 3f1f29
+
Hans de Goede 3f1f29
+    ioh = find_iohandler(fd);
Hans de Goede 3f1f29
+    if (!ioh) {
Hans de Goede 3f1f29
+        return;
Hans de Goede 3f1f29
+    }
Hans de Goede 3f1f29
+
Hans de Goede 3f1f29
+    ioh->fd_write = fd_write;
Hans de Goede 3f1f29
+}
Hans de Goede 3f1f29
+
Hans de Goede 3f1f29
+void disable_write_fd_handler(int fd)
Hans de Goede 3f1f29
+{
Hans de Goede 3f1f29
+    IOHandlerRecord *ioh;
Hans de Goede 3f1f29
+
Hans de Goede 3f1f29
+    ioh = find_iohandler(fd);
Hans de Goede 3f1f29
+    if (!ioh) {
Hans de Goede 3f1f29
+        return;
Hans de Goede 3f1f29
+    }
Hans de Goede 3f1f29
+
Hans de Goede 3f1f29
+    ioh->fd_write = NULL;
Hans de Goede 3f1f29
+}
Hans de Goede 3f1f29
 
Hans de Goede 3f1f29
 /* XXX: fd_read_poll should be suppressed, but an API change is
Hans de Goede 3f1f29
    necessary in the character devices to suppress fd_can_read(). */
Hans de Goede 3f1f29
diff --git a/qemu-char.h b/qemu-char.h
Hans de Goede 3f1f29
index c8e3f2b..7d5dc6c 100644
Hans de Goede 3f1f29
--- a/qemu-char.h
Hans de Goede 3f1f29
+++ b/qemu-char.h
Hans de Goede 3f1f29
@@ -121,6 +121,9 @@ size_t qemu_chr_mem_osize(const CharDriverState *chr);
Hans de Goede 3f1f29
 
Hans de Goede 3f1f29
 /* async I/O support */
Hans de Goede 3f1f29
 
Hans de Goede 3f1f29
+void enable_write_fd_handler(int fd, IOHandler *fd_write);
Hans de Goede 3f1f29
+void disable_write_fd_handler(int fd);
Hans de Goede 3f1f29
+
Hans de Goede 3f1f29
 int qemu_set_fd_handler2(int fd,
Hans de Goede 3f1f29
                          IOCanReadHandler *fd_read_poll,
Hans de Goede 3f1f29
                          IOHandler *fd_read,
Hans de Goede 3f1f29
-- 
Hans de Goede 3f1f29
1.7.5.1
Hans de Goede 3f1f29