// 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. // VMOptions=--enable-isolate-groups --experimental-enable-isolate-groups-jit // VMOptions=--no-enable-isolate-groups import 'dart:async'; import 'dart:isolate'; int globalHash = 0; class A { int get hashCode => globalHash; bool operator ==(other) => true; } final key = new A(); other(SendPort sendPort) async { // We use a different hash than the main isolate, but the re-hashing on our // side happens after this line and should therefore also deserialize the map // with a new hash, so we should be able to find the value in the map. globalHash = 4321; final port = new ReceivePort(); sendPort.send(port.sendPort); final Map map = await port.first; sendPort.send(map[key]); port.close(); } void launchIsolate(argument) { other(argument); } main() async { final r = new ReceivePort(); final re = new ReceivePort(); final map = {}; globalHash = 1234; map[key] = 1; await Isolate.spawn(launchIsolate, r.sendPort, onError: re.sendPort); re.listen((error) => throw 'Error $error'); final it = new StreamIterator(r); await it.moveNext(); final SendPort port = it.current; port.send(map); await it.moveNext(); final otherIsolateMapEntry = await it.current; if (map[key] != otherIsolateMapEntry) { throw "test failed"; } r.close(); re.close(); }