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

Unified Diff: native_client_sdk/src/libraries/ppapi_simple/ps_instance.cc

Issue 61213002: [NaCl SDK] Run nacl_io_socket_test on the bots. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 1 month 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
Index: native_client_sdk/src/libraries/ppapi_simple/ps_instance.cc
diff --git a/native_client_sdk/src/libraries/ppapi_simple/ps_instance.cc b/native_client_sdk/src/libraries/ppapi_simple/ps_instance.cc
index 8aa50b9fd90151918f0d521048e0c7be3a981f96..3f59e08b48ac2a12b0b96e8e8bad81c6f0385856 100644
--- a/native_client_sdk/src/libraries/ppapi_simple/ps_instance.cc
+++ b/native_client_sdk/src/libraries/ppapi_simple/ps_instance.cc
@@ -64,21 +64,39 @@ void* PSInstance::MainThreadThunk(void *info) {
si->inst_->main_loop_->AttachToCurrentThread();
int ret = si->inst_->MainThread(si->argc_, si->argv_);
+
+ char* exit_message = si->inst_->exit_message_;
+ bool should_exit = exit_message == NULL;
+
+ if (exit_message) {
+ // Send the exit message to JavaScript. Don't call exit(), so the message
+ // doesn't get dropped.
+ si->inst_->Log("Posting exit message to JavaScript.\n");
+ si->inst_->PostMessage(exit_message);
+ free(exit_message);
+ exit_message = si->inst_->exit_message_ = NULL;
+ }
+
+ // Clean up StartInfo.
for (uint32_t i = 0; i < si->argc_; i++) {
delete[] si->argv_[i];
}
delete[] si->argv_;
delete si;
- // Exit the entire process once the 'main' thread returns.
- // The error code will be available to javascript via
- // the exitcode paramater of the crash event.
- exit(ret);
+
+ if (should_exit) {
+ // Exit the entire process once the 'main' thread returns.
+ // The error code will be available to javascript via
+ // the exitcode parameter of the crash event.
+ exit(ret);
+ }
+
return NULL;
}
// The default implementation supports running a 'C' main.
-int PSInstance::MainThread(int argc, char *argv[]) {
+int PSInstance::MainThread(int argc, char* argv[]) {
if (!main_cb_) {
Error("No main defined.\n");
return 0;
@@ -87,6 +105,7 @@ int PSInstance::MainThread(int argc, char *argv[]) {
Trace("Starting MAIN.\n");
int ret = main_cb_(argc, argv);
Log("Main thread returned with %d.\n", ret);
+
return ret;
}
@@ -98,7 +117,8 @@ PSInstance::PSInstance(PP_Instance instance)
events_enabled_(PSE_NONE),
verbosity_(PSV_WARN),
tty_fd_(-1),
- tty_prefix_(NULL) {
+ tty_prefix_(NULL),
+ exit_message_(NULL) {
// Set the single Instance object
s_InstanceObject = this;
@@ -227,6 +247,11 @@ bool PSInstance::ProcessProperties() {
}
}
+ const char* exit_message = getenv("PS_EXIT_MESSAGE");
+ if (exit_message) {
+ exit_message_ = strdup(exit_message);
+ }
+
// Set line buffering on stdout and stderr
#if !defined(WIN32)
setvbuf(stderr, NULL, _IOLBF, 0);
« no previous file with comments | « native_client_sdk/src/libraries/ppapi_simple/ps_instance.h ('k') | native_client_sdk/src/tests/nacl_io_socket_test/example.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698