| 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);
|
|
|
|
|