diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog
index 1195d7ee5e989547ad963d0ed83bc226f5e32758..936d3bfc2332dab687ab04a9790814b0c79d778f 100644
--- a/boehm-gc/ChangeLog
+++ b/boehm-gc/ChangeLog
@@ -1,3 +1,9 @@
+2006-04-11  Bryce McKinlay  <mckinlay@redhat.com>
+
+	* darwin_stop_world.c (GC_push_all_stacks, GC_stop_world,
+	GC_start_world): Call vm_deallocate to free act_list. Fix from
+	Bruce Mitchener.
+
 2006-03-24  Andreas Tobler  <a.tobler@schweiz.ch>
 	John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
 
diff --git a/boehm-gc/darwin_stop_world.c b/boehm-gc/darwin_stop_world.c
index 3c0c3710afbf6f653a0bea9053a4975470b247ad..c2a033d3cc44d2c9e547d39558676bcbc8ff37d2 100644
--- a/boehm-gc/darwin_stop_world.c
+++ b/boehm-gc/darwin_stop_world.c
@@ -249,6 +249,7 @@ void GC_push_all_stacks() {
 #     endif
       GC_push_all_stack(lo, hi); 
     } /* for(p=GC_threads[i]...) */
+    vm_deallocate(current_task(), (vm_address_t)act_list, sizeof(thread_t) * listcount);
 }
 #endif /* !DARWIN_DONT_PARSE_STACK */
 
@@ -392,6 +393,7 @@ void GC_stop_world()
 	changes = result;
 	prev_list = act_list;
 	prevcount = listcount;
+        vm_deallocate(current_task(), (vm_address_t)act_list, sizeof(thread_t) * listcount);
       } while (changes);
       
  
@@ -463,6 +465,7 @@ void GC_start_world()
 	}
       }
     }
+    vm_deallocate(current_task(), (vm_address_t)act_list, sizeof(thread_t) * listcount);
 #   if DEBUG_THREADS
      GC_printf0("World started\n");
 #   endif