Index: runtime/vm/isolate.h |
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h |
index 56cf82e2f2cd860b890662883260bc9638ddec2c..c3cd74c3749cd97f0fa24e56b748afaa177d4121 100644 |
--- a/runtime/vm/isolate.h |
+++ b/runtime/vm/isolate.h |
@@ -56,6 +56,7 @@ class RawError; |
class RawFloat32x4; |
class RawInt32x4; |
class RawUserTag; |
+class SafepointHandler; |
class SampleBuffer; |
class SendPort; |
class ServiceIdZone; |
@@ -126,9 +127,13 @@ class Isolate : public BaseIsolate { |
// Visits weak object pointers. |
void VisitWeakPersistentHandles(HandleVisitor* visitor); |
+ // Prepares all threads in an isolate for Garbage Collection. |
+ void PrepareForGC(); |
+ |
StoreBuffer* store_buffer() { return store_buffer_; } |
- ThreadRegistry* thread_registry() { return thread_registry_; } |
+ ThreadRegistry* thread_registry() const { return thread_registry_; } |
+ SafepointHandler* safepoint_handler() const { return safepoint_handler_; } |
ClassTable* class_table() { return &class_table_; } |
static intptr_t class_table_offset() { |
@@ -687,17 +692,10 @@ class Isolate : public BaseIsolate { |
void set_registered_service_extension_handlers( |
const GrowableObjectArray& value); |
- void ClearMutatorThread() { |
- mutator_thread_ = NULL; |
- } |
- void MakeCurrentThreadMutator(Thread* thread) { |
- ASSERT(thread == Thread::Current()); |
- DEBUG_ASSERT(IsIsolateOf(thread)); |
- mutator_thread_ = thread; |
- } |
-#if defined(DEBUG) |
- bool IsIsolateOf(Thread* thread); |
-#endif // DEBUG |
+ Monitor* threads_lock() const; |
+ Thread* ScheduleThread(bool is_mutator, bool bypass_safepoint = false); |
+ void UnscheduleThread( |
+ Thread* thread, bool is_mutator, bool bypass_safepoint = false); |
// DEPRECATED: Use Thread's methods instead. During migration, these default |
// to using the mutator thread (which must also be the current thread). |
@@ -721,6 +719,7 @@ class Isolate : public BaseIsolate { |
bool skip_step_; // skip the next single step. |
ThreadRegistry* thread_registry_; |
+ SafepointHandler* safepoint_handler_; |
Dart_MessageNotifyCallback message_notify_callback_; |
char* name_; |
char* debugger_name_; |
@@ -860,6 +859,7 @@ REUSABLE_HANDLE_LIST(REUSABLE_FRIEND_DECLARATION) |
#undef REUSABLE_FRIEND_DECLARATION |
friend class GCMarker; // VisitObjectPointers |
+ friend class SafepointHandler; |
friend class Scavenger; // VisitObjectPointers |
friend class ServiceIsolate; |
friend class Thread; |