Index: /trunk/ccl/lisp-kernel/gc.c
===================================================================
--- /trunk/ccl/lisp-kernel/gc.c	(revision 824)
+++ /trunk/ccl/lisp-kernel/gc.c	(revision 825)
@@ -1892,5 +1892,26 @@
 }
       
-      
+
+void *postGCptrs = NULL;
+
+void
+postGCfree(void *p)
+{
+  *(void **)p = postGCptrs;
+  postGCptrs = p;
+}
+
+void
+freeGCptrs()
+{
+  void *p, *next;
+
+  for (p = postGCptrs; p; p = next) {
+    next = *((void **)p);
+    free(p);
+  }
+  postGCptrs = NULL;
+}
+
 void
 reap_gcable_ptrs()
@@ -1920,5 +1941,5 @@
 
         case xmacptr_flag_ptr:
-	  deallocate((char *)ptr_from_lispobj(ptr));
+	  postGCfree((void *)ptr_from_lispobj(ptr));
           break;
 
Index: /trunk/ccl/lisp-kernel/gc.h
===================================================================
--- /trunk/ccl/lisp-kernel/gc.h	(revision 824)
+++ /trunk/ccl/lisp-kernel/gc.h	(revision 825)
@@ -48,4 +48,5 @@
 void mark_locative_root(LispObj);
 void rmark(LispObj);
+void postGCfree(void *);
 LispObj *skip_over_ivector(LispObj, LispObj);
 void mark_simple_area_range(LispObj *,LispObj *);
Index: /trunk/ccl/lisp-kernel/lisp-exceptions.c
===================================================================
--- /trunk/ccl/lisp-kernel/lisp-exceptions.c	(revision 824)
+++ /trunk/ccl/lisp-kernel/lisp-exceptions.c	(revision 825)
@@ -831,5 +831,8 @@
 gc_from_xp(ExceptionInformation *xp)
 {
-  return gc_like_from_xp(xp, gc_from_tcr);
+  int status = gc_like_from_xp(xp, gc_from_tcr);
+
+  freeGCptrs();
+  return status;
 }
 
