Index: /trunk/ccl/lisp-kernel/thread_manager.c
===================================================================
--- /trunk/ccl/lisp-kernel/thread_manager.c	(revision 825)
+++ /trunk/ccl/lisp-kernel/thread_manager.c	(revision 826)
@@ -115,5 +115,5 @@
 {
   destroy_semaphore((void **)&m->signal);
-  free(m->malloced_ptr);
+  postGCfree((void *)(m->malloced_ptr));
 }
 
@@ -862,4 +862,25 @@
 #endif
 
+TCR *freed_tcrs = NULL;
+
+void
+enqueue_freed_tcr (TCR *tcr)
+{
+  tcr->next = freed_tcrs;
+  freed_tcrs = tcr;
+}
+
+void
+free_freed_tcrs ()
+{
+  TCR *current, *next;
+
+  for (current = freed_tcrs; current; current = next) {
+    next = current->next;
+    free(current);
+  }
+  freed_tcrs = NULL;
+}
+
 void
 suspend_other_threads()
@@ -886,5 +907,5 @@
       if ((other->osid == 0))  {
 	dequeue_tcr(other);
-	free(other);
+	enqueue_freed_tcr(other);
       }
     }
@@ -899,4 +920,5 @@
     resume_tcr(other);
   }
+  free_freed_tcrs();
   UNLOCK(lisp_global(AREA_LOCK), current);
   UNLOCK(lisp_global(TCR_LOCK), current);
