diff --git a/src/block_alloc.h b/src/block_alloc.h index 3317f4150e5953f8c7d607103a2779e4e4229363..ec4c02e7efb7e1d17d983dd0c00fd6d579242786 100644 --- a/src/block_alloc.h +++ b/src/block_alloc.h @@ -99,10 +99,12 @@ #endif #define WALK_NONFREE_BLOCKS(DATA, BLOCK, FCOND, CODE) do { \ - struct PIKE_CONCAT(DATA,_block) * p; \ - for(p=PIKE_CONCAT(DATA,_blocks);p;p=p->next) { \ + struct PIKE_CONCAT(DATA,_block) * p, * np; \ + p = PIKE_CONCAT(DATA,_blocks); \ + while (p) { \ int n = p->used; \ int i; \ + np = p->next; \ for (i = 0; n && i < (sizeof(p->x)/sizeof(struct DATA)); i++) { \ BLOCK = &p->x[i]; \ if (FCOND) { \ @@ -110,6 +112,7 @@ --n; \ } \ } \ + p = np; \ } \ } while(0)