// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/// A library for utility functions for dealing with isolates.
import 'dart:async';
import 'dart:io';
import 'dart:isolate';

/// Like [Isolate.spanwUri], except that this only returns once the Isolate has
/// exited.
///
/// If the isolate produces an unhandled exception, it's printed to stderr and
/// the [exitCode] variable is set to 255.
///
/// If [buffered] is `true`, this uses [spawnBufferedUri] to spawn the isolate.
Future runUri(Uri url, List<String> args, Object message,
    {bool buffered: false,
    bool checked,
    bool automaticPackageResolution: false,
    Uri packageConfig}) async {
  var errorPort = new ReceivePort();
  var exitPort = new ReceivePort();

  await Isolate.spawnUri(url, args, message,
      checked: checked,
      automaticPackageResolution: automaticPackageResolution,
      packageConfig: packageConfig,
      onError: errorPort.sendPort,
      onExit: exitPort.sendPort);

  errorPort.listen((list) {
    stderr.writeln("Unhandled exception:");
    stderr.writeln(list[0]);
    stderr.write(list[1]);
    exitCode = 255;
  });

  await exitPort.first;
}
