qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 03/16] Convert io handlers to QLIST


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH 03/16] Convert io handlers to QLIST
Date: Mon, 22 Mar 2010 14:40:15 -0500
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.5) Gecko/20091209 Fedora/3.0-4.fc12 Lightning/1.0pre Thunderbird/3.0

On 03/11/2010 10:55 AM, Juan Quintela wrote:
Signed-off-by: Juan Quintela<address@hidden>

Applied 3-7, thanks.

Regards,

Anthony Liguori

---
  vl.c |   35 ++++++++++++++---------------------
  1 files changed, 14 insertions(+), 21 deletions(-)

diff --git a/vl.c b/vl.c
index 10d8e34..051eb1c 100644
--- a/vl.c
+++ b/vl.c
@@ -2597,10 +2597,12 @@ typedef struct IOHandlerRecord {
      void *opaque;
      /* temporary data */
      struct pollfd *ufd;
-    struct IOHandlerRecord *next;
+    QLIST_ENTRY(IOHandlerRecord) next;
  } IOHandlerRecord;

-static IOHandlerRecord *first_io_handler;
+static QLIST_HEAD(, IOHandlerRecord) io_handlers =
+    QLIST_HEAD_INITIALIZER(io_handlers);
+

  /* XXX: fd_read_poll should be suppressed, but an API change is
     necessary in the character devices to suppress fd_can_read(). */
@@ -2610,28 +2612,22 @@ int qemu_set_fd_handler2(int fd,
                           IOHandler *fd_write,
                           void *opaque)
  {
-    IOHandlerRecord **pioh, *ioh;
+    IOHandlerRecord *ioh;

      if (!fd_read&&  !fd_write) {
-        pioh =&first_io_handler;
-        for(;;) {
-            ioh = *pioh;
-            if (ioh == NULL)
-                break;
+        QLIST_FOREACH(ioh,&io_handlers, next) {
              if (ioh->fd == fd) {
                  ioh->deleted = 1;
                  break;
              }
-            pioh =&ioh->next;
          }
      } else {
-        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
+        QLIST_FOREACH(ioh,&io_handlers, next) {
              if (ioh->fd == fd)
                  goto found;
          }
          ioh = qemu_mallocz(sizeof(IOHandlerRecord));
-        ioh->next = first_io_handler;
-        first_io_handler = ioh;
+        QLIST_INSERT_HEAD(&io_handlers, ioh, next);
      found:
          ioh->fd = fd;
          ioh->fd_read_poll = fd_read_poll;
@@ -3822,7 +3818,7 @@ void main_loop_wait(int timeout)
      FD_ZERO(&rfds);
      FD_ZERO(&wfds);
      FD_ZERO(&xfds);
-    for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
+    QLIST_FOREACH(ioh,&io_handlers, next) {
          if (ioh->deleted)
              continue;
          if (ioh->fd_read&&
@@ -3848,9 +3844,9 @@ void main_loop_wait(int timeout)
      ret = select(nfds + 1,&rfds,&wfds,&xfds,&tv);
      qemu_mutex_lock_iothread();
      if (ret>  0) {
-        IOHandlerRecord **pioh;
+        IOHandlerRecord *pioh;

-        for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) {
+        QLIST_FOREACH(ioh,&io_handlers, next) {
              if (!ioh->deleted&&  ioh->fd_read&&  FD_ISSET(ioh->fd,&rfds)) {
                  ioh->fd_read(ioh->opaque);
              }
@@ -3860,14 +3856,11 @@ void main_loop_wait(int timeout)
          }

        /* remove deleted IO handlers */
-       pioh =&first_io_handler;
-       while (*pioh) {
-            ioh = *pioh;
+        QLIST_FOREACH_SAFE(ioh,&io_handlers, next, pioh) {
              if (ioh->deleted) {
-                *pioh = ioh->next;
+                QLIST_REMOVE(ioh, next);
                  qemu_free(ioh);
-            } else
-                pioh =&ioh->next;
+            }
          }
      }






reply via email to

[Prev in Thread] Current Thread [Next in Thread]