Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 2 Jul 2002 16:54:43 -0700 (PDT)
From:      Julian Elischer <julian@elischer.org>
To:        Terry Lambert <tlambert2@mindspring.com>
Cc:        Garrett Wollman <wollman@lcs.mit.edu>, Jonathan Lemon <jlemon@flugsvamp.com>, current@FreeBSD.ORG
Subject:   Re: additional queue macro
Message-ID:  <Pine.BSF.4.21.0207021648200.97650-100000@InterJet.elischer.org>
In-Reply-To: <Pine.BSF.4.21.0207021556300.97650-100000@InterJet.elischer.org>

next in thread | previous in thread | raw e-mail | index | archive | help


On Tue, 2 Jul 2002, Julian Elischer wrote:

Having just re-read my own mail

I think I agree with jonathan now..
I think we neeed to either:
1/ augment the man page  giving an example of how to do
multiple removes from a list/queue.
2/ Explain in detail why using XXXX_FOREACH()
is bad for this, and showing the alternative.
3/ Add something to the API that makes this easy to do.
designing the API addition is tricky. Jonathan's effort
was quite good, though I wonder if there is any way we can get it done
without needing the decalration of 'tmp' separatly.
(I can't think of a way).



> /* 
>  * Move any threads that should be suspended from the run queue
>  * to the suspend queue.
>  */
> TAILQ_FOREACH(from run queue) {
> 	if (something) {
> 		TAILQ_REMOVE(element from run queue)
> 		TAILQ_INSERT_TAIL(onto suspend queue)
> 	}
> }
> 
> Now, at first glance, the documentation suggests this should work, even
> though we know it won't. but it doesn't crash.. it just terminates on the
> first transfer because it reaches the end of the queue.. the suspend queue
> that is..

TAILQ_FOREACH_REMOVABLE or TAILQ_FOREACH_SAFE
(I prefer the first) are my suggestions for the name.)




To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0207021648200.97650-100000>