Index: runtime/bin/vmservice/loader.dart |
diff --git a/runtime/bin/vmservice/loader.dart b/runtime/bin/vmservice/loader.dart |
index 1ff9eee49405ca10f1d902c927d1b97cd8938189..955e09b26e8d37c3979ba1b55d1f7cc4f1db985b 100644 |
--- a/runtime/bin/vmservice/loader.dart |
+++ b/runtime/bin/vmservice/loader.dart |
@@ -69,11 +69,14 @@ class IsolateLoaderState extends IsolateEmbedderData { |
IsolateLoaderState(this.isolateId); |
final int isolateId; |
- |
+ bool _dead = false; |
SendPort sp; |
void init(String packageRootFlag, String packagesConfigFlag, |
String workingDirectory, String rootScript) { |
+ if (_dead) { |
+ return; |
+ } |
// _workingDirectory must be set first. |
_workingDirectory = new Uri.directory(workingDirectory); |
if (rootScript != null) { |
@@ -87,10 +90,13 @@ class IsolateLoaderState extends IsolateEmbedderData { |
if (packagesConfigFlag != null) { |
_setPackagesConfig(packagesConfigFlag); |
} |
- _fileRequestQueue = new List<FileRequest>(); |
+ if (_fileRequestQueue != null) { |
+ _fileRequestQueue = new List<FileRequest>(); |
+ } |
} |
void cleanup() { |
+ _dead = true; |
if (_packagesPort != null) { |
_packagesPort.close(); |
_packagesPort = null; |
@@ -255,8 +261,11 @@ class IsolateLoaderState extends IsolateEmbedderData { |
RawReceivePort _packagesPort; |
void _requestPackagesMap([Uri packageConfig]) { |
- assert(_packagesPort == null); |
assert(_rootScript != null); |
+ if (_packagesPort != null) { |
+ // Already scheduled. |
+ return; |
+ } |
// Create a port to receive the packages map on. |
_packagesPort = new RawReceivePort(_handlePackagesReply); |
var sp = _packagesPort.sendPort; |
@@ -275,7 +284,9 @@ class IsolateLoaderState extends IsolateEmbedderData { |
} |
void _handlePackagesReply(msg) { |
- assert(_packagesPort != null); |
+ if (_packagesPort == null) { |
+ return; |
+ } |
// Make sure to close the _packagePort before any other action. |
_packagesPort.close(); |
_packagesPort = null; |