Index: runtime/bin/main.cc |
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc |
index 5c36f41abee04c0ac518f95a8328b615e666fe24..7efcdb1d63407549d4b1deb783c56e4098661311 100644 |
--- a/runtime/bin/main.cc |
+++ b/runtime/bin/main.cc |
@@ -108,7 +108,14 @@ static void ErrorExit(int exit_code, const char* format, ...) { |
Dart_ExitScope(); |
Dart_ShutdownIsolate(); |
- Dart_Cleanup(); |
+ // Terminate process exit-code handler. |
+ Process::TerminateExitCodeHandler(); |
+ |
+ char* error = Dart_Cleanup(); |
+ if (error != NULL) { |
+ Log::PrintErr("VM cleanup failed: %s\n", error); |
+ free(error); |
+ } |
exit(exit_code); |
} |
@@ -624,6 +631,7 @@ static Dart_Isolate CreateIsolateAndSetupHelper(const char* script_uri, |
error); |
if (isolate == NULL) { |
+ delete isolate_data; |
return NULL; |
} |
@@ -688,7 +696,8 @@ static Dart_Isolate CreateIsolateAndSetupHelper(const char* script_uri, |
Platform::SetPackageRoot(package_root); |
- DartUtils::SetupIOLibrary(script_uri); |
+ result = DartUtils::SetupIOLibrary(script_uri); |
+ CHECK_RESULT(result); |
// Make the isolate runnable so that it is ready to handle messages. |
Dart_ExitScope(); |
@@ -1029,15 +1038,17 @@ void main(int argc, char** argv) { |
} |
// Initialize the Dart VM. |
- if (!Dart_Initialize(vm_isolate_snapshot_buffer, |
- CreateIsolateAndSetup, NULL, NULL, ShutdownIsolate, |
- DartUtils::OpenFile, |
- DartUtils::ReadFile, |
- DartUtils::WriteFile, |
- DartUtils::CloseFile, |
- DartUtils::EntropySource)) { |
- fprintf(stderr, "%s", "VM initialization failed\n"); |
+ char* error = Dart_Initialize(vm_isolate_snapshot_buffer, |
+ CreateIsolateAndSetup, NULL, NULL, ShutdownIsolate, |
+ DartUtils::OpenFile, |
+ DartUtils::ReadFile, |
+ DartUtils::WriteFile, |
+ DartUtils::CloseFile, |
+ DartUtils::EntropySource); |
+ if (error != NULL) { |
+ fprintf(stderr, "VM initialization failed: %s\n", error); |
fflush(stderr); |
+ free(error); |
exit(kErrorExitCode); |
} |
@@ -1048,7 +1059,6 @@ void main(int argc, char** argv) { |
// Call CreateIsolateAndSetup which creates an isolate and loads up |
// the specified application script. |
- char* error = NULL; |
int exit_code = 0; |
char* isolate_name = BuildIsolateName(script_name, "main"); |
Dart_Isolate isolate = CreateIsolateAndSetupHelper(script_name, |
@@ -1061,7 +1071,14 @@ void main(int argc, char** argv) { |
if (isolate == NULL) { |
Log::PrintErr("%s\n", error); |
free(error); |
+ error = NULL; |
delete [] isolate_name; |
+ Process::TerminateExitCodeHandler(); |
+ error = Dart_Cleanup(); |
+ if (error != NULL) { |
+ Log::PrintErr("VM cleanup failed: %s\n", error); |
+ free(error); |
+ } |
exit((exit_code != 0) ? exit_code : kErrorExitCode); |
} |
delete [] isolate_name; |
@@ -1165,7 +1182,11 @@ void main(int argc, char** argv) { |
// Terminate process exit-code handler. |
Process::TerminateExitCodeHandler(); |
- Dart_Cleanup(); |
+ error = Dart_Cleanup(); |
+ if (error != NULL) { |
+ Log::PrintErr("VM cleanup failed: %s\n", error); |
+ free(error); |
+ } |
// Free copied argument strings if converted. |
if (argv_converted) { |