Branch: Tag:

2000-07-06

2000-07-06 23:30:40 by Martin Stjernholm <mast@lysator.liu.se>

Fixed a slight risk for freeing memory twice.

Rev: src/gc.c:1.103

29:      #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:    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:    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:    }    if (!p) break;    } +     CALL_AND_UNSET_ONERROR(err);    }    UNSETJMP(uwp);