Index: runtime/vm/pages.cc |
diff --git a/runtime/vm/pages.cc b/runtime/vm/pages.cc |
index f45c5b04a95f5715b7f77d3ab3e2ccd2571e8ffe..dd3b82845499cc6063aadf5d9b9a473cfae8a18f 100644 |
--- a/runtime/vm/pages.cc |
+++ b/runtime/vm/pages.cc |
@@ -11,6 +11,7 @@ |
#include "vm/lockers.h" |
#include "vm/object.h" |
#include "vm/os_thread.h" |
+#include "vm/thread_registry.h" |
#include "vm/verified_memory.h" |
#include "vm/virtual_memory.h" |
@@ -768,6 +769,8 @@ void PageSpace::MarkSweep(bool invoke_api_callbacks) { |
set_tasks(1); |
} |
+ int safepoint_id = isolate->thread_registry()->SafepointThreads(); |
+ |
// Perform various cleanup that relies on no tasks interfering. |
isolate->class_table()->FreeOldTables(); |
@@ -880,8 +883,8 @@ void PageSpace::MarkSweep(bool invoke_api_callbacks) { |
} |
} else { |
// Start the concurrent sweeper task now. |
- GCSweeper::SweepConcurrent( |
- isolate, pages_, pages_tail_, &freelist_[HeapPage::kData]); |
+ GCSweeper::SweepConcurrent(isolate, pages_, pages_tail_, |
+ &freelist_[HeapPage::kData], safepoint_id); |
} |
} |
@@ -907,6 +910,8 @@ void PageSpace::MarkSweep(bool invoke_api_callbacks) { |
freelist_[HeapPage::kExecutable].Print(); |
} |
+ isolate->thread_registry()->ResumeAllThreads(); // Rename |
+ |
// Done, reset the task count. |
{ |
MonitorLocker ml(tasks_lock()); |