[Top][All Lists]
[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
- [Qemu-devel] [PATCH v2 00/14] Clear fd handlers, Juan Quintela, 2010/03/10
- [Qemu-devel] [PATCH 01/14] Convert io handlers to QLIST, Juan Quintela, 2010/03/10
- Re: [Qemu-devel] [PATCH 01/14] Convert io handlers to QLIST,
malc <=
- [Qemu-devel] Re: [PATCH 01/14] Convert io handlers to QLIST, Juan Quintela, 2010/03/10
- [Qemu-devel] Re: [PATCH 01/14] Convert io handlers to QLIST, malc, 2010/03/10
- [Qemu-devel] Re: [PATCH 01/14] Convert io handlers to QLIST, Juan Quintela, 2010/03/10
- [Qemu-devel] Re: [PATCH 01/14] Convert io handlers to QLIST, malc, 2010/03/10
- [Qemu-devel] Re: [PATCH 01/14] Convert io handlers to QLIST, Juan Quintela, 2010/03/10
[Qemu-devel] [PATCH 02/14] remove useless cast, Juan Quintela, 2010/03/10
[Qemu-devel] [PATCH 03/14] rename IOCanRWHandler to IOCanReadHandler, Juan Quintela, 2010/03/10
[Qemu-devel] [PATCH 04/14] bt: remove bt_host_read_poll(), Juan Quintela, 2010/03/10
[Qemu-devel] [PATCH 05/14] Handle deleted IOHandlers in a single pass, Juan Quintela, 2010/03/10
[Qemu-devel] [PATCH 07/14] qemu-char:stdio insert poll call into read one, Juan Quintela, 2010/03/10