| // Copyright (c) 2017, 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. |
| |
| /// @assertion void removeOnExitListener( |
| /// SendPort responsePort |
| /// ) |
| /// Stop listening on exit messages from the isolate. |
| /// If a call has previously been made to addOnExitListener with the same |
| /// send-port, this will unregister the port, and it will no longer receive |
| /// a message when the isolate terminates. A response may still be sent until |
| /// this operation is fully processed by the isolate. |
| /// |
| /// @description Check that given port does not receive events after call |
| /// to removeOnExitListener(). |
| /// |
| /// @author a.semenov@unipro.ru |
| |
| import "dart:isolate"; |
| import "dart:async"; |
| import "../../../Utils/expect.dart"; |
| import "IsolateUtil.dart"; |
| |
| test() async { |
| // setup |
| ReceivePort receivePort = new ReceivePort(); |
| ReceivePort onExit = new ReceivePort(); |
| Future onExitFuture = onExit.first; |
| EchoServer server = await EchoServer.spawn(receivePort.sendPort); |
| server.isolate.addOnExitListener(onExit.sendPort); |
| // do something |
| server.send("hello"); |
| await receivePort.first; |
| |
| server.isolate.removeOnExitListener(onExit.sendPort); |
| |
| await server.stop(); |
| onExitFuture = onExitFuture.timeout(new Duration(milliseconds: 200), |
| onTimeout: () => "timeout"); |
| Expect.equals("timeout", await onExitFuture); |
| // clean up |
| onExit.close(); |
| asyncEnd(); |
| } |
| |
| main() { |
| asyncStart(); |
| test(); |
| } |