aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-09-09 13:18:22 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-09-09 13:18:22 -0700
commitcf0d875a089916b63d051b2e36d7cc00510e0c84 (patch)
tree800d1cf74bfc4354e686ae5597dd5046732eb32b
parent1d6d0572192981def4b7d4ec5d25285bb4d82183 (diff)
parent23d3488895071f1b8f71f45509ee36f40662cedd (diff)
Merge pull request #1578 from inolen/browser_exception
gracefully handle ExitStatus exception in async main loops
-rw-r--r--src/library_browser.js10
-rw-r--r--src/postamble.js10
2 files changed, 18 insertions, 2 deletions
diff --git a/src/library_browser.js b/src/library_browser.js
index 235ccc78..e4966e15 100644
--- a/src/library_browser.js
+++ b/src/library_browser.js
@@ -724,7 +724,15 @@ mergeInto(LibraryManager.library, {
Module['preMainLoop']();
}
- Runtime.dynCall('v', func);
+ try {
+ Runtime.dynCall('v', func);
+ } catch (e) {
+ if (e instanceof ExitStatus) {
+ return;
+ } else {
+ throw e;
+ }
+ }
if (Module['postMainLoop']) {
Module['postMainLoop']();
diff --git a/src/postamble.js b/src/postamble.js
index d3212767..94b60288 100644
--- a/src/postamble.js
+++ b/src/postamble.js
@@ -128,7 +128,15 @@ function exit(status) {
// exit the runtime
exitRuntime();
-
+
+ // TODO We should handle this differently based on environment.
+ // In the browser, the best we can do is throw an exception
+ // to halt execution, but in node we could process.exit and
+ // I'd imagine SM shell would have something equivalent.
+ // This would let us set a proper exit status (which
+ // would be great for checking test exit statuses).
+ // https://github.com/kripken/emscripten/issues/1371
+
// throw an exception to halt the current execution
throw new ExitStatus(status);
}