qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: malc <av1474@comtv.ru>
To: Juan Quintela <quintela@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 01/14] Convert io handlers to QLIST
Date: Wed, 10 Mar 2010 14:57:40 +0300 (MSK)	[thread overview]
Message-ID: <alpine.LNX.2.00.1003101457001.1478@linmac> (raw)
In-Reply-To: <4f197c437a4d2f813ce518b4fd2d86fc225f500e.1268214633.git.quintela@redhat.com>

On Wed, 10 Mar 2010, Juan Quintela wrote:

> 
> Signed-off-by: Juan Quintela <quintela@redhat.com>
> ---
>  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:av1474@comtv.ru

  reply	other threads:[~2010-03-10 11:57 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-10 10:03 [Qemu-devel] [PATCH v2 00/14] Clear fd handlers Juan Quintela
2010-03-10 10:03 ` [Qemu-devel] [PATCH 01/14] Convert io handlers to QLIST Juan Quintela
2010-03-10 11:57   ` malc [this message]
2010-03-10 12:06     ` [Qemu-devel] " Juan Quintela
2010-03-10 12:08       ` malc
2010-03-10 12:20         ` Juan Quintela
2010-03-10 12:54           ` malc
2010-03-10 13:03             ` Juan Quintela
2010-03-10 10:03 ` [Qemu-devel] [PATCH 02/14] remove useless cast Juan Quintela
2010-03-10 10:03 ` [Qemu-devel] [PATCH 03/14] rename IOCanRWHandler to IOCanReadHandler Juan Quintela
2010-03-10 10:03 ` [Qemu-devel] [PATCH 04/14] bt: remove bt_host_read_poll() Juan Quintela
2010-03-10 10:03 ` [Qemu-devel] [PATCH 05/14] Handle deleted IOHandlers in a single pass Juan Quintela
2010-03-10 10:03 ` [Qemu-devel] [PATCH 06/14] tap: insert tap_can_send() into tap_send() Juan Quintela
2010-03-10 10:03 ` [Qemu-devel] [PATCH 07/14] qemu-char:stdio insert poll call into read one Juan Quintela
2010-03-10 10:03 ` [Qemu-devel] [PATCH 08/14] qemu-char:tcp " Juan Quintela
2010-03-10 10:03 ` [Qemu-devel] [PATCH 09/14] qemu-char:fd " Juan Quintela
2010-03-10 10:03 ` [Qemu-devel] [PATCH 10/14] qemu-char:pty " Juan Quintela
2010-03-10 10:03 ` [Qemu-devel] [PATCH 11/14] qemu-char:udp " Juan Quintela
2010-03-10 10:03 ` [Qemu-devel] [PATCH 12/14] Remove qemu_set_fd_handler2() Juan Quintela
2010-03-10 10:03 ` [Qemu-devel] [PATCH 13/14] Remove now unused fd_read_poll and all its only left user Juan Quintela
2010-03-10 10:03 ` [Qemu-devel] [PATCH 14/14] Add qemu_remove_fd_handler() Juan Quintela

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.LNX.2.00.1003101457001.1478@linmac \
    --to=av1474@comtv.ru \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).