| Index: runtime/bin/main.cc
|
| diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
|
| index 5c36f41abee04c0ac518f95a8328b615e666fe24..daab5541ada1d838cbc1dc6b6d99d6d9e916ae2a 100644
|
| --- a/runtime/bin/main.cc
|
| +++ b/runtime/bin/main.cc
|
| @@ -108,8 +108,16 @@ 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);
|
| + }
|
|
|
| + EventHandler::Stop();
|
| exit(exit_code);
|
| }
|
|
|
| @@ -624,6 +632,7 @@ static Dart_Isolate CreateIsolateAndSetupHelper(const char* script_uri,
|
| error);
|
|
|
| if (isolate == NULL) {
|
| + delete isolate_data;
|
| return NULL;
|
| }
|
|
|
| @@ -688,7 +697,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 +1039,18 @@ 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) {
|
| + EventHandler::Stop();
|
| + fprintf(stderr, "VM initialization failed: %s\n", error);
|
| fflush(stderr);
|
| + free(error);
|
| exit(kErrorExitCode);
|
| }
|
|
|
| @@ -1048,7 +1061,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 +1073,15 @@ 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);
|
| + }
|
| + EventHandler::Stop();
|
| exit((exit_code != 0) ? exit_code : kErrorExitCode);
|
| }
|
| delete [] isolate_name;
|
| @@ -1165,7 +1185,13 @@ 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);
|
| + }
|
| +
|
| + EventHandler::Stop();
|
|
|
| // Free copied argument strings if converted.
|
| if (argv_converted) {
|
|
|