| // Copyright (c) 2018, 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. |
| |
| // @dart = 2.9 |
| |
| // VMOptions=--no-enable-fast-object-copy |
| // VMOptions=--enable-fast-object-copy |
| |
| import "dart:async"; |
| import "dart:developer" show UserTag; |
| import "dart:isolate" show Isolate, ReceivePort; |
| import "dart:typed_data" show ByteData; |
| import "package:expect/expect.dart"; |
| |
| const large = 2 * 1024 * 1024; |
| |
| void child(replyPort) { |
| print("Child start"); |
| |
| Expect.throws(() { |
| replyPort.send([ |
| new ByteData(large), |
| new UserTag("User tags are not allowed in isolate messages"), |
| new ByteData(large), |
| ]); |
| replyPort.send("Not reached"); |
| }, (e) { |
| return e.toString().contains("Illegal argument in isolate message"); |
| }); |
| |
| replyPort.send("Done"); |
| |
| print("Child done"); |
| } |
| |
| Future<void> main(List<String> args) async { |
| print("Parent start"); |
| |
| ReceivePort port = new ReceivePort(); |
| Isolate.spawn(child, port.sendPort); |
| |
| Expect.equals("Done", await port.first); |
| |
| print("Parent done"); |
| } |