diff -ruN klic-3.003-2002-02-17e/runtime/unify.c klic-3.003-2002-02-18/runtime/unify.c
--- klic-3.003-2002-02-17e/runtime/unify.c	Sun Feb 17 16:03:45 2002
+++ klic-3.003-2002-02-18/runtime/unify.c	Mon Feb 18 14:46:07 2002
@@ -197,17 +197,17 @@
   return allocp;
 }
 
-static Inline q*
-generator_unify(gsx, sy, allocp)
+static Inline void
+generator_unify(gsx, sy)
      struct generator_susp *gsx;
      struct susprec *sy;
-     q *allocp;
 /*
    sx is a suspension structure
    and y is hook or generator
 */
 {
   declare_globals;
+  q* allocp = heapp();
   q *tmpallocp;
 
   /* At first, try unify method */
@@ -266,7 +266,8 @@
 	  if(isref(tmpx) && tmpx == derefone(tmpx)) {
 	    derefone(sy->backpt) = tmpx;
 	  } else {
-	    return do_unify(allocp, tmpx, sy->backpt);
+	    set_heapp (do_unify (allocp, tmpx, sy->backpt));
+	    return;
 	  }
 	}
       }
@@ -287,12 +288,13 @@
 	if(isref(tmpx) && tmpx == derefone(tmpx)) {
 	  derefone(tmpx) = sy->backpt;
 	} else {
-	  return do_unify(allocp, tmpx, sy->backpt);
+	  set_heapp (do_unify (allocp, tmpx, sy->backpt));
+	  return;
 	}
       }
     }
   }
-  return allocp;
+  set_heapp(allocp);
 }
 
 extern q*
@@ -330,9 +332,13 @@
 		  struct susprec *sx = (struct susprec *)x;
 		  struct susprec *sy = (struct susprec *)y;
 		  if(is_generator_susp(sx->u)) {
-		    return generator_unify(generator_suspp(sx), sy, allocp);
+		    set_heapp(allocp);
+		    generator_unify(generator_suspp(sx), sy);
+		    return heapp();
 		  } else if(is_generator_susp(sy->u)) {
-		    return generator_unify(generator_suspp(sy), sx, allocp);
+		    set_heapp(allocp);
+		    generator_unify(generator_suspp(sy), sx);
+		    return heapp();
 		  } else {
 		    /* Both x and y are not generator */
 		    /* None of two is generator, then merge ... */
