From 1342fc6f040231b986ee2daddeb905bf89a8af84 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Wed, 7 Aug 2002 14:37:32 +0000 Subject: [PATCH] (mark_object): Detect long lists for debugging. (mark_object_loop_halt): New variable. --- src/alloc.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/alloc.c b/src/alloc.c index b8d54ee3ba9..1d7c9044c7c 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -4427,6 +4427,12 @@ mark_image_cache (f) Lisp_Object *last_marked[LAST_MARKED_SIZE]; int last_marked_index; +/* For debugging--call abort when we cdr down this many + links of a list, in mark_object. In debugging, + the call to abort will hit a breakpoint. + Normally this is zero and the check never goes off. */ +int mark_object_loop_halt; + void mark_object (argptr) Lisp_Object *argptr; @@ -4437,6 +4443,7 @@ mark_object (argptr) void *po; struct mem_node *m; #endif + int cdr_count = 0; loop: obj = *objptr; @@ -4790,10 +4797,14 @@ mark_object (argptr) if (EQ (ptr->cdr, Qnil)) { objptr = &ptr->car; + cdr_count = 0; goto loop; } mark_object (&ptr->car); objptr = &ptr->cdr; + cdr_count++; + if (cdr_count == mark_object_loop_halt) + abort (); goto loop; } -- 2.39.2