| Index: runtime/vm/service_isolate.cc
 | 
| diff --git a/runtime/vm/service_isolate.cc b/runtime/vm/service_isolate.cc
 | 
| index 3779905093b7a5a401698fb608fec912ad4e4669..f866f31ed987f49e8e5629c578dbda68128d379c 100644
 | 
| --- a/runtime/vm/service_isolate.cc
 | 
| +++ b/runtime/vm/service_isolate.cc
 | 
| @@ -749,8 +749,30 @@ void ServiceIsolate::Run() {
 | 
|  }
 | 
|  
 | 
|  
 | 
| +void ServiceIsolate::KillServiceIsolate() {
 | 
| +  {
 | 
| +    MonitorLocker ml(monitor_);
 | 
| +    shutting_down_ = true;
 | 
| +  }
 | 
| +  Isolate::KillIsolate(isolate_);
 | 
| +  {
 | 
| +    MonitorLocker ml(monitor_);
 | 
| +    while (shutting_down_) {
 | 
| +      ml.Wait();
 | 
| +    }
 | 
| +  }
 | 
| +}
 | 
| +
 | 
| +
 | 
|  void ServiceIsolate::Shutdown() {
 | 
|    if (!IsRunning()) {
 | 
| +    if (isolate_ != NULL) {
 | 
| +      // TODO(johnmccutchan,turnidge) When it is possible to properly create
 | 
| +      // the VMService object and set up its shutdown handler in the service
 | 
| +      // isolate's main() function, this case will no longer be possible and
 | 
| +      // can be removed.
 | 
| +      KillServiceIsolate();
 | 
| +    }
 | 
|      return;
 | 
|    }
 | 
|    {
 | 
| 
 |