From ab61ca51f72d13842b9ecd00134dc4e34815a11a Mon Sep 17 00:00:00 2001
From: Martin Stjernholm <mast@lysator.liu.se>
Date: Sun, 16 Dec 2001 19:51:21 +0100
Subject: [PATCH] Do not allow allocations and frees in GC_PASS_LOCATE, which
 is essentially the same as GC_PASS_CHECK.

Rev: src/gc.h:1.89
---
 src/gc.h | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/gc.h b/src/gc.h
index 0b88b51609..c79f2fdc5a 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)
 
-- 
GitLab