diff options
| author | Richard M. Stallman | 2002-08-07 14:37:32 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 2002-08-07 14:37:32 +0000 |
| commit | 1342fc6f040231b986ee2daddeb905bf89a8af84 (patch) | |
| tree | 443dab63e3db09b4169c64478edfed93503ac25e /src/alloc.c | |
| parent | 3622bdf9a42bcfd6d09418fcdfa2695e75f65269 (diff) | |
| download | emacs-1342fc6f040231b986ee2daddeb905bf89a8af84.tar.gz emacs-1342fc6f040231b986ee2daddeb905bf89a8af84.zip | |
(mark_object): Detect long lists for debugging.
(mark_object_loop_halt): New variable.
Diffstat (limited to 'src/alloc.c')
| -rw-r--r-- | src/alloc.c | 11 |
1 files changed, 11 insertions, 0 deletions
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) | |||
| 4427 | Lisp_Object *last_marked[LAST_MARKED_SIZE]; | 4427 | Lisp_Object *last_marked[LAST_MARKED_SIZE]; |
| 4428 | int last_marked_index; | 4428 | int last_marked_index; |
| 4429 | 4429 | ||
| 4430 | /* For debugging--call abort when we cdr down this many | ||
| 4431 | links of a list, in mark_object. In debugging, | ||
| 4432 | the call to abort will hit a breakpoint. | ||
| 4433 | Normally this is zero and the check never goes off. */ | ||
| 4434 | int mark_object_loop_halt; | ||
| 4435 | |||
| 4430 | void | 4436 | void |
| 4431 | mark_object (argptr) | 4437 | mark_object (argptr) |
| 4432 | Lisp_Object *argptr; | 4438 | Lisp_Object *argptr; |
| @@ -4437,6 +4443,7 @@ mark_object (argptr) | |||
| 4437 | void *po; | 4443 | void *po; |
| 4438 | struct mem_node *m; | 4444 | struct mem_node *m; |
| 4439 | #endif | 4445 | #endif |
| 4446 | int cdr_count = 0; | ||
| 4440 | 4447 | ||
| 4441 | loop: | 4448 | loop: |
| 4442 | obj = *objptr; | 4449 | obj = *objptr; |
| @@ -4790,10 +4797,14 @@ mark_object (argptr) | |||
| 4790 | if (EQ (ptr->cdr, Qnil)) | 4797 | if (EQ (ptr->cdr, Qnil)) |
| 4791 | { | 4798 | { |
| 4792 | objptr = &ptr->car; | 4799 | objptr = &ptr->car; |
| 4800 | cdr_count = 0; | ||
| 4793 | goto loop; | 4801 | goto loop; |
| 4794 | } | 4802 | } |
| 4795 | mark_object (&ptr->car); | 4803 | mark_object (&ptr->car); |
| 4796 | objptr = &ptr->cdr; | 4804 | objptr = &ptr->cdr; |
| 4805 | cdr_count++; | ||
| 4806 | if (cdr_count == mark_object_loop_halt) | ||
| 4807 | abort (); | ||
| 4797 | goto loop; | 4808 | goto loop; |
| 4798 | } | 4809 | } |
| 4799 | 4810 | ||