diff options
author | Neal H. Walfield <neal@gnu.org> | 2008-05-27 18:37:56 +0000 |
---|---|---|
committer | Neal H. Walfield <neal@gnu.org> | 2008-05-27 18:37:56 +0000 |
commit | c7e4a8e5fa992c489aa7bc7153fb8208b7270cb0 (patch) | |
tree | 778ca2e2baaa66dfd196578d986716db97f72363 /pthread | |
parent | b2a1b2813ee59a9a1a789e49146ffb6fb1001eb7 (diff) |
2008-05-27 Neal H. Walfield <neal@gnu.org>
* pthread/pt-internal.h (__pthread_queue_iterate): Before
returning the current element, save its next pointer.
(__pthread_dequeuing_iterate): Likewise.
Diffstat (limited to 'pthread')
-rw-r--r-- | pthread/pt-internal.h | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/pthread/pt-internal.h b/pthread/pt-internal.h index efd4ffb9..5583dfc3 100644 --- a/pthread/pt-internal.h +++ b/pthread/pt-internal.h @@ -114,15 +114,22 @@ __pthread_dequeue (struct __pthread *thread) } /* Iterate over QUEUE storing each element in ELEMENT. */ -#define __pthread_queue_iterate(queue, element) \ - for (element = queue; element; element = element->next) +#define __pthread_queue_iterate(queue, element) \ + for (struct __pthread *__pdi_next = (queue); \ + ((element) = __pdi_next) \ + && ((__pdi_next = __pdi_next->next), \ + true); \ + ) /* Iterate over QUEUE dequeuing each element, storing it in ELEMENT. */ -#define __pthread_dequeuing_iterate(queue, element) \ - for (element = queue; \ - element && ((element->prevp = 0), 1); \ - element = element->next) +#define __pthread_dequeuing_iterate(queue, element) \ + for (struct __pthread *__pdi_next = (queue); \ + ((element) = __pdi_next) \ + && ((__pdi_next = __pdi_next->next), \ + ((element)->prevp = 0), \ + true); \ + ) /* The total number of threads currently active. */ extern __atomic_t __pthread_total; |