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
next prev parent 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).