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

Unified Diff: sdk/lib/isolate/isolate.dart

Issue 179823002: Add Isolate.onExit. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 10 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: sdk/lib/isolate/isolate.dart
diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart
index a8063a083e695b133935d081f440d7010259e43f..71a51c9355292a49070150daa025240c726c9acf 100644
--- a/sdk/lib/isolate/isolate.dart
+++ b/sdk/lib/isolate/isolate.dart
@@ -36,9 +36,20 @@ class Isolate {
* to the control port.
*/
final SendPort controlPort;
+ /**
+ * Capability granting the ability to pause the isolate.
+ */
final Capability pauseCapability;
+ /**
+ * Capability granting the ability to inspect the isolate.
+ *
+ * This capability is needed to be able to see uncaught errors and exit of
+ * the isolate.
floitsch 2014/02/25 19:25:48 I don't think inspecting is the same as being able
Lasse Reichstein Nielsen 2014/02/27 08:04:28 Would "observe" be a better word. It suggests a mo
+ */
+ final Capability inspectCapability;
- Isolate._fromControlPort(this.controlPort, [this.pauseCapability]);
+ Isolate._fromControlPort(this.controlPort, [this.pauseCapability,
+ this.inspectCapability]);
/**
* Creates and spawns an isolate that shares the same code as the current
@@ -96,7 +107,7 @@ class Isolate {
* and must be used again to end the pause using [resume].
* Otherwise a new capability is created and returned.
*
- * If an isolate is paused more than once using the same capabilty,
+ * If an isolate is paused more than once using the same capability,
* only one resume with that capability is needed to end the pause.
*
* If an isolate is paused using more than one capability,
@@ -133,6 +144,26 @@ class Isolate {
..[1] = resumeCapability;
controlPort.send(message);
}
+
+ /**
+ * Returns a future that completes after the isolate has terminated.
+ */
+ Future get onExit {
+ // Should we return a broadcast stream instead? It has the advantage
floitsch 2014/02/25 19:25:48 I don't see any stream.
Lasse Reichstein Nielsen 2014/02/27 08:04:28 No, I was suggesting a broadcast stream instead of
+ // that you can stop listening again.
+ var completer = new Completer();
+ var receivePort;
+ receivePort = new RawReceivePort((_) {
+ completer.complete();
+ receivePort.close();
+ });
+ var message = new List(3)
+ ..[0] = "ondone"
+ ..[1] = inspectCapability
+ ..[2] = receivePort.sendPort;
+ controlPort.send(message);
+ return completer.future;
+ }
}
/**

Powered by Google App Engine
This is Rietveld 408576698