Index: sdk/lib/_internal/compiler/js_lib/isolate_helper.dart |
diff --git a/sdk/lib/_internal/compiler/js_lib/isolate_helper.dart b/sdk/lib/_internal/compiler/js_lib/isolate_helper.dart |
index 6f3e3611ded95104da05c24ec0659f54c6b6021f..2619c3507647e2935be43dd2490a19a7451ed0b0 100644 |
--- a/sdk/lib/_internal/compiler/js_lib/isolate_helper.dart |
+++ b/sdk/lib/_internal/compiler/js_lib/isolate_helper.dart |
@@ -14,7 +14,7 @@ import 'dart:_js_embedded_names' show |
INSTANCE_FROM_CLASS_ID; |
import 'dart:async'; |
-import 'dart:collection' show Queue, HashMap; |
+import 'dart:collection' show Queue; |
import 'dart:isolate'; |
import 'dart:_native_typed_data' show NativeByteBuffer, NativeTypedData; |
@@ -357,15 +357,26 @@ class _IsolateContext implements IsolateContext { |
void addDoneListener(SendPort responsePort, Object response) { |
if (doneHandlers == null) { |
- // TODO(lrn): Use map optimized for few keys. |
- doneHandlers = new HashMap(); |
+ doneHandlers = []; |
} |
- doneHandlers[responsePort] = response; |
+ for (int i = 0; i < doneHandlers.length; i += 2) { |
+ if (responsePort == doneHandlers[i]) { |
+ doneHandlers[i + 1] = response; |
+ return; |
+ } |
+ } |
+ doneHandlers.add(responsePort); |
+ doneHandlers.add(response); |
} |
void removeDoneListener(SendPort responsePort) { |
if (doneHandlers == null) return; |
- doneHandlers.remove(responsePort); |
+ for (int i = 0; i < doneHandlers.length; i += 2) { |
+ if (responsePort == doneHandlers[i]) { |
+ doneHandlers.removeRange(i, i + 2); |
+ return; |
+ } |
+ } |
} |
void setErrorsFatal(Capability authentification, bool errorsAreFatal) { |
@@ -564,7 +575,11 @@ class _IsolateContext implements IsolateContext { |
_globalState.isolates.remove(id); // indicate this isolate is not active |
errorPorts.clear(); |
if (doneHandlers != null) { |
- doneHandlers.forEach((port, response) { port.send(response); }); |
+ for (int i = 0; i < doneHandlers.length; i += 2) { |
+ SendPort responsePort = doneHandlers[i]; |
+ Object response = doneHandlers[i + 1]; |
+ responsePort.send(response); |
+ } |
doneHandlers = null; |
} |
} |