Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(821)

Unified Diff: runtime/vm/service/vmservice.dart

Issue 1030013002: Shutdown the service isolate when shutting down the VM (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/vm/service/vmservice.dart
diff --git a/runtime/vm/service/vmservice.dart b/runtime/vm/service/vmservice.dart
index d4eca93ddb6b64c4580bf25cc0dc520b12e50445..934bd6fcd354fffaba11c2819bc8080782fc1fb6 100644
--- a/runtime/vm/service/vmservice.dart
+++ b/runtime/vm/service/vmservice.dart
@@ -18,6 +18,8 @@ part 'message_router.dart';
final RawReceivePort isolateLifecyclePort = new RawReceivePort();
final RawReceivePort scriptLoadPort = new RawReceivePort();
+typedef ShutdownCallback();
+
class VMService extends MessageRouter {
static VMService _instance;
/// Collection of currently connected clients.
@@ -32,6 +34,8 @@ class VMService extends MessageRouter {
/// A port used to receive events from the VM.
final RawReceivePort eventPort;
+ ShutdownCallback onShutdown;
+
void _addClient(Client client) {
clients.add(client);
}
@@ -94,12 +98,28 @@ class VMService extends MessageRouter {
}
}
+ void _exit() {
+ if (onShutdown != null) {
+ onShutdown();
+ }
+ isolateLifecyclePort.close();
+ scriptLoadPort.close();
+ var clientList = clients.toList();
+ for (var client in clientList) {
+ client.close();
+ }
+ _onExit();
+ }
+
void messageHandler(message) {
assert(message is List);
- if (message is List && message.length == 4) {
+ if (message is List && (message.length == 4)) {
_controlMessageHandler(message[0], message[1], message[2], message[3]);
- } else if (message is List && message.length == 2) {
+ } else if (message is List && (message.length == 2)) {
_eventMessageHandler(message[0], message[1]);
+ } else if (message is List && (message.length == 1)) {
+ assert(message[0] == Constants.SERVICE_EXIT_MESSAGE_ID);
+ _exit();
} else {
Logger.root.severe('Unexpected message: $message');
}
@@ -164,3 +184,5 @@ void _setEventMask(int mask)
native "VMService_SetEventMask";
void _onStart() native "VMService_OnStart";
+
+void _onExit() native "VMService_OnExit";

Powered by Google App Engine
This is Rietveld 408576698