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)