void checkasylist(NODE **head) { NODE **prev = head; for (;;) { NODE *t = *prev; if (!t) return; if (t->prev != prev) { fprintf(stderr, "Bad prev: %p->prev = %p, should be %p\n", t, t->prev, prev); abort(); } prev = &t->next; t = t->next; } } . . . // jobs is full initialised, ready to run asy_insert(&jobq, job); checkasylist(&jobq); . . .