| Index: runtime/vm/isolate.h | 
| diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h | 
| index cc6b54da6aca38d244df7b2c176b68973431b8b6..e0ff67b28196817279625a8f5ca4de1f08172351 100644 | 
| --- a/runtime/vm/isolate.h | 
| +++ b/runtime/vm/isolate.h | 
| @@ -754,8 +754,15 @@ class Isolate : public BaseIsolate { | 
|  | 
| bool is_service_isolate() const { return is_service_isolate_; } | 
|  | 
| +  static void KillAllIsolates(); | 
| +  static void KillIfExists(Isolate* isolate); | 
| + | 
| +  static void DisableIsolateCreation(); | 
| +  static void EnableIsolateCreation(); | 
| + | 
| private: | 
| friend class Dart;  // Init, InitOnce, Shutdown. | 
| +  friend class IsolateKillerVisitor;  // Kill(). | 
|  | 
| explicit Isolate(const Dart_IsolateFlags& api_flags); | 
|  | 
| @@ -763,6 +770,11 @@ class Isolate : public BaseIsolate { | 
| static Isolate* Init(const char* name_prefix, | 
| const Dart_IsolateFlags& api_flags, | 
| bool is_vm_isolate = false); | 
| + | 
| +  // The isolates_list_monitor_ should be held when calling Kill(). | 
| +  void KillLocked(); | 
| + | 
| +  void LowLevelShutdown(); | 
| void Shutdown(); | 
| // Assumes mutator is the only thread still in the isolate. | 
| void CloseAllTimelineBlocks(); | 
| @@ -956,11 +968,13 @@ class Isolate : public BaseIsolate { | 
| static void WakePauseEventHandler(Dart_Isolate isolate); | 
|  | 
| // Manage list of existing isolates. | 
| -  static void AddIsolateTolist(Isolate* isolate); | 
| +  static bool AddIsolateToList(Isolate* isolate); | 
| static void RemoveIsolateFromList(Isolate* isolate); | 
|  | 
| -  static Monitor* isolates_list_monitor_;  // Protects isolates_list_head_ | 
| +  // This monitor protects isolates_list_head_, and creation_enabled_. | 
| +  static Monitor* isolates_list_monitor_; | 
| static Isolate* isolates_list_head_; | 
| +  static bool creation_enabled_; | 
|  | 
| #define REUSABLE_FRIEND_DECLARATION(name)                                      \ | 
| friend class Reusable##name##HandleScope; | 
|  |