Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(609)

Unified Diff: runtime/bin/main.cc

Issue 1177153005: Enables clean VM shutdown. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Fix error propagation Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/bin/gen_snapshot.cc ('k') | runtime/bin/process.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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) {
« no previous file with comments | « runtime/bin/gen_snapshot.cc ('k') | runtime/bin/process.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698