qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 01/14] Convert io handlers to QLIST


From: malc
Subject: Re: [Qemu-devel] [PATCH 01/14] Convert io handlers to QLIST
Date: Wed, 10 Mar 2010 14:57:40 +0300 (MSK)
User-agent: Alpine 2.00 (LNX 1167 2008-08-23)

On Wed, 10 Mar 2010, Juan Quintela wrote:

> 
> Signed-off-by: Juan Quintela <address@hidden>
> ---
>  vl.c |   35 ++++++++++++++---------------------
>  1 files changed, 14 insertions(+), 21 deletions(-)
> 
> diff --git a/vl.c b/vl.c
> index 10d8e34..83ff652 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -2597,10 +2597,12 @@ typedef struct IOHandlerRecord {
>      void *opaque;
>      /* temporary data */
>      struct pollfd *ufd;
> -    struct IOHandlerRecord *next;
> +    QTAILQ_ENTRY(IOHandlerRecord) next;
>  } IOHandlerRecord;
> 
> -static IOHandlerRecord *first_io_handler;
> +static QTAILQ_HEAD(, IOHandlerRecord) io_handlers =
> +    QTAILQ_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;
> +        QTAILQ_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) {
> +        QTAILQ_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;
> +        QTAILQ_INSERT_TAIL(&io_handlers, ioh, next);

The old code inserted at the head, didn't it?

>      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) {
> +    QTAILQ_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) {
> +        QTAILQ_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;
> +        QTAILQ_FOREACH_SAFE(ioh, &io_handlers, next, pioh) {
>              if (ioh->deleted) {
> -                *pioh = ioh->next;
> +                QTAILQ_REMOVE(&io_handlers, ioh, next);
>                  qemu_free(ioh);
> -            } else
> -                pioh = &ioh->next;
> +            }
>          }
>      }
> 
> 

-- 
mailto:address@hidden




reply via email to

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