It happens if two places in the code uses simple_list within each other because the simple_list holds internal state. In such cases, one should use the iterator solution instead (have a look in simple_list() in lists.c for how it's done).
Apparently it doesn't happen often - you will always have two hits close to each other (one when the outer loop is surpassed by the inner, and one when the inner loop is done).
I don't think it is related to your crashes.
However, if you really want to find out what's happening (and who doesn't
you can get some debugging info by dumping core when it happens:
Code:
if (!loop || pLastList != pList) {
- if (loop && pLastList != pList)
+ if (loop && pLastList != pList) {
mudlog(CMP, LVL_GRGOD, TRUE, "SYSERR: simple_list() forced to reset itself.");
+ core_dump();
+ }
pContent = merge_iterator(&Iterator, pList);
This will give you a core dump to let you see a backtrace.