Index: sdk/lib/isolate/isolate.dart |
diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart |
index 9b488c21bb243150f8e52c68dd02c3034e105f67..9a8b313f51537d937a0a7cd04daf8a973d73043b 100644 |
--- a/sdk/lib/isolate/isolate.dart |
+++ b/sdk/lib/isolate/isolate.dart |
@@ -144,15 +144,30 @@ class Isolate { |
* If the [paused] parameter is set to `true`, |
* the isolate will start up in a paused state, |
* as if by an initial call of `isolate.pause(isolate.pauseCapability)`. |
- * This allows setting up error or exit listeners on the isolate |
- * before it starts running. |
* To resume the isolate, call `isolate.resume(isolate.pauseCapability)`. |
* |
+ * If the [errorAreFatal], [onExit] and/or [onError] parameters are provided, |
+ * the isolate will act as if, respectively, [setErrorsFatal], |
+ * [addOnExitListener] and [addErrorListener] were called with the |
+ * corresponding parameter and was processed before the isolate starts |
+ * running. |
+ * |
+ * You can also call the [setErrorsFatal], [addOnExitListener] and |
+ * [addErrorListener] methods on the returned isolate, but unless the |
+ * isolate was started as [paused], it may already have terminated |
+ * before those methods can complete. |
+ * |
+ * WARNING: The [errorsAreFatal], [onExit] and [onError] parameters are not |
+ * implemented yet. |
+ * |
* Returns a future that will complete with an [Isolate] instance if the |
* spawning succeeded. It will complete with an error otherwise. |
*/ |
external static Future<Isolate> spawn(void entryPoint(message), var message, |
- { bool paused: false }); |
+ { bool paused: false, |
+ bool errorsAreFatal, |
+ SendPort onExit, |
+ SendPort onError }); |
/** |
* Creates and spawns an isolate that runs the code from the library with |
@@ -161,7 +176,8 @@ class Isolate { |
* The isolate starts executing the top-level `main` function of the library |
* with the given URI. |
* |
- * The target `main` must be a subtype of one of these three signatures: |
+ * The target `main` must be callable with zero, one or two arguments. |
+ * Examples: |
* |
* * `main()` |
* * `main(args)` |
@@ -173,10 +189,22 @@ class Isolate { |
* If the [paused] parameter is set to `true`, |
* the isolate will start up in a paused state, |
* as if by an initial call of `isolate.pause(isolate.pauseCapability)`. |
- * This allows setting up error or exit listeners on the isolate |
- * before it starts running. |
* To resume the isolate, call `isolate.resume(isolate.pauseCapability)`. |
* |
+ * If the [errorAreFatal], [onExit] and/or [onError] parameters are provided, |
+ * the isolate will act as if, respectively, [setErrorsFatal], |
+ * [addOnExitListener] and [addErrorListener] were called with the |
+ * corresponding parameter and was processed before the isolate starts |
+ * running. |
+ * |
+ * You can also call the [setErrorsFatal], [addOnExitListener] and |
+ * [addErrorListener] methods on the returned isolate, but unless the |
+ * isolate was started as [paused], it may already have terminated |
+ * before those methods can complete. |
+ * |
+ * WARNING: The [errorsAreFatal], [onExit] and [onError] parameters are not |
+ * implemented yet. |
+ * |
* If the [checked] parameter is set to `true` or `false`, |
* the new isolate will run code in checked mode, |
* respectively in production mode, if possible. |
@@ -214,7 +242,10 @@ class Isolate { |
var message, |
{bool paused: false, |
bool checked, |
- Uri packageRoot}); |
+ Uri packageRoot, |
+ bool errorsAreFatal, |
+ SendPort onExit, |
+ SendPort onError}); |
/** |
* Requests the isolate to pause. |
@@ -276,10 +307,13 @@ class Isolate { |
* If `response` cannot be sent to the isolate, then the request is ignored. |
* It is recommended to only use simple values that can be sent to all |
* isolates, like `null`, booleans, numbers or strings. |
- * |
+ * |
* Since isolates run concurrently, it's possible for it to exit before the |
- * exit listener is established. To avoid this, start the isolate paused, |
- * add the listener, then resume it. |
+ * exit listener is established, and in that case no response will be |
+ * sent on [responsePort]. |
+ * To avoid this, either use the corresponding parameter to the spawn |
+ * function, or start the isolate paused, add the listener and |
+ * then resume the isolate. |
*/ |
/* TODO(lrn): Can we do better? Can the system recognize this message and |
* send a reply if the receiving isolate is dead? |
@@ -305,6 +339,12 @@ class Isolate { |
* |
* This call requires the [terminateCapability] for the isolate. |
* If the capability is not correct, no change is made. |
+ * |
+ * Since isolates run concurrently, it's possible for it to exit due to an |
+ * error before errors are set non-fatal. |
+ * To avoid this, either use the corresponding parameter to the spawn |
+ * function, or start the isolate paused, set errors non-fatal and |
+ * then resume the isolate. |
*/ |
external void setErrorsFatal(bool errorsAreFatal); |
@@ -368,10 +408,10 @@ class Isolate { |
* |
* Listening using the same port more than once does nothing. It will only |
* get each error once. |
- * |
+ * |
* Since isolates run concurrently, it's possible for it to exit before the |
* error listener is established. To avoid this, start the isolate paused, |
- * add the listener, then resume it. |
+ * add the listener and then resume the isolate. |
*/ |
external void addErrorListener(SendPort port); |