diff --git a/src/gc.c b/src/gc.c index 5ed0f7531070f752f4f17654eca92ad05bdcea5c..901ba6efa3da9060ff038d2805c4897cc1920b34 100644 --- a/src/gc.c +++ b/src/gc.c @@ -29,7 +29,7 @@ struct callback *gc_evaluator_callback=0; #include "block_alloc.h" -RCSID("$Id: gc.c,v 1.102 2000/07/04 21:44:19 grubba Exp $"); +RCSID("$Id: gc.c,v 1.103 2000/07/06 23:30:40 mast Exp $"); /* Run garbage collect approximately every time * 20 percent of all arrays, objects and programs is @@ -1567,8 +1567,8 @@ static void warn_bad_cycles() unsigned cycle = 0; ONERROR err; struct array *obj_arr = allocate_array(0); - SET_ONERROR(err, do_free_array, obj_arr); + for (p = kill_list; p;) { if ((cycle = p->cycle)) { push_object((struct object *) p->data); @@ -1580,6 +1580,7 @@ static void warn_bad_cycles() push_constant_text("gc"); push_constant_text("bad_cycle"); push_array(obj_arr); + obj_arr = 0; SAFE_APPLY_MASTER("runtime_warning", 3); pop_stack(); obj_arr = allocate_array(0); @@ -1588,6 +1589,7 @@ static void warn_bad_cycles() } if (!p) break; } + CALL_AND_UNSET_ONERROR(err); } UNSETJMP(uwp);