#define ASTOBJ_CONTAINER_TRAVERSE2(container,iteratorname,continue,eval) \ do { \ typeof((container)->head) iterator##iteratorname; \ typeof((container)->head) next; \ ASTOBJ_CONTAINER_RDLOCK(container); \ next = (container)->head; \ while((continue) && (iterator##iteratorname = next)) { \ next = iterator##iteratorname->next[0]; \ eval; \ } \ ASTOBJ_CONTAINER_UNLOCK(container); \ } while(0)