[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] rng: switch request queue to QSIMPLEQ
From: |
Amit Shah |
Subject: |
Re: [Qemu-devel] [PATCH] rng: switch request queue to QSIMPLEQ |
Date: |
Fri, 4 Mar 2016 14:46:40 +0530 |
On (Fri) 04 Mar 2016 [09:04:22], Ladi Prosek wrote:
> On Fri, Mar 4, 2016 at 7:27 AM, Amit Shah <address@hidden> wrote:
> > On (Thu) 03 Mar 2016 [14:16:11], Ladi Prosek wrote:
> >> QSIMPLEQ supports appending to tail in O(1) and is intrusive so
> >> it doesn't require extra memory allocations for the bookkeeping
> >> data.
> >>
> >> Suggested-by: Paolo Bonzini <address@hidden>
> >> Signed-off-by: Ladi Prosek <address@hidden>
> >
> >> @@ -83,24 +83,27 @@ static void rng_backend_free_request(RngRequest *req)
> >>
> >> static void rng_backend_free_requests(RngBackend *s)
> >> {
> >> - GSList *i;
> >> + RngRequest *req, *next;
> >>
> >> - for (i = s->requests; i; i = i->next) {
> >> - rng_backend_free_request(i->data);
> >> + QSIMPLEQ_FOREACH_SAFE(req, &s->requests, next, next) {
> >> + rng_backend_free_request(req);
> >> }
> >>
> >> - g_slist_free(s->requests);
> >> - s->requests = NULL;
> >> + QSIMPLEQ_INIT(&s->requests);
> >> }
> >
> > This init here isn't necessary, the accessors for the queue will take
> > care of this.
>
> We are basically purging the queue here and we want to leave it in a
> consistent state. Without the QSIMPLEQ_INIT the queue head would
> become a pair of dangling pointers. Let me know if I misunderstood
> your comment.
QSIMPLEQ_REMOVE does take care to assign NULL, so future
QSIMPLEQ_EMPTY, QSIMPLEQ_FIRST, etc., calls work just fine.
Amit
Re: [Qemu-devel] [PATCH] rng: switch request queue to QSIMPLEQ, Amit Shah, 2016/03/04