diff --git a/src/gc.h b/src/gc.h index 0b88b51609a5d955f67461fd5f7ab232b97f1904..c79f2fdc5aed49525eda19bb954c4e35642ec238 100644 --- a/src/gc.h +++ b/src/gc.h @@ -1,5 +1,5 @@ /* - * $Id: gc.h,v 1.88 2001/12/10 01:09:31 mast Exp $ + * $Id: gc.h,v 1.89 2001/12/16 18:51:21 mast Exp $ */ #ifndef GC_H #define GC_H @@ -31,7 +31,8 @@ extern void *gc_svalue_location; num_allocs++; \ DO_IF_DEBUG( \ if(d_flag) CHECK_INTERPRETER_LOCK(); \ - if(Pike_in_gc > GC_PASS_PREPARE && Pike_in_gc < GC_PASS_FREE) \ + if((Pike_in_gc > GC_PASS_PREPARE && Pike_in_gc < GC_PASS_FREE) || \ + Pike_in_gc == GC_PASS_LOCATE) \ fatal("Allocating new objects within gc is not allowed!\n"); \ ) \ if (Pike_in_gc) remove_marker(OBJ); \ @@ -57,7 +58,7 @@ extern void *gc_svalue_location; #define GC_FREE_SIMPLE_BLOCK(PTR) do { \ extern int d_flag; \ if(d_flag) CHECK_INTERPRETER_LOCK(); \ - if (Pike_in_gc == GC_PASS_CHECK) \ + if (Pike_in_gc == GC_PASS_CHECK || Pike_in_gc == GC_PASS_LOCATE) \ fatal("No free is allowed in this gc pass.\n"); \ else \ remove_marker(PTR); \ @@ -68,7 +69,8 @@ extern void *gc_svalue_location; #define GC_FREE_BLOCK(PTR) do { \ extern int d_flag; \ if(d_flag) CHECK_INTERPRETER_LOCK(); \ - if (Pike_in_gc > GC_PASS_PREPARE && Pike_in_gc < GC_PASS_FREE) \ + if ((Pike_in_gc > GC_PASS_PREPARE && Pike_in_gc < GC_PASS_FREE) || \ + Pike_in_gc == GC_PASS_LOCATE) \ fatal("Freeing objects within gc is not allowed.\n"); \ } while (0)