diff options
| author | Joyee Cheung <joyeec9h3@gmail.com> | 2019-06-15 08:07:15 +0800 |
|---|---|---|
| committer | Joyee Cheung <joyeec9h3@gmail.com> | 2019-06-19 16:16:37 +0800 |
| commit | a33c3c6d33fa81fa59a5aa95246d7f599e6abdd3 (patch) | |
| tree | 16ee1009fda3317f5cdf3f8b80491f6b84b03d3e /src/node_errors.h | |
| parent | 1c23b6f2bec82904aacfff279f0e2776246b6da4 (diff) | |
| download | node-new-a33c3c6d33fa81fa59a5aa95246d7f599e6abdd3.tar.gz | |
src: refactor uncaught exception handling
The C++ land `node::FatalException()` is not in fact fatal anymore.
It gives the user a chance to handle the uncaught exception
globally by listening to the `uncaughtException` event. This patch
renames it to `TriggerUncaughtException` in C++ to avoid the confusion.
In addition rename the JS land handler to `onGlobalUncaughtException`
to reflect its purpose - we have to keep the alias
`process._fatalException` and use that for now since it has been
monkey-patchable in the user land.
This patch also
- Adds more comments to the global uncaught exception handling routine
- Puts a few other C++ error handling functions into the `errors`
namespace
- Moves error-handling-related bindings to the `errors` binding.
Refs: https://github.com/nodejs/node/commit/2b252acea47af3ebeac3d7e68277f015667264cc
PR-URL: https://github.com/nodejs/node/pull/28257
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
Diffstat (limited to 'src/node_errors.h')
| -rw-r--r-- | src/node_errors.h | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/src/node_errors.h b/src/node_errors.h index 689911f996..939f93a489 100644 --- a/src/node_errors.h +++ b/src/node_errors.h @@ -29,21 +29,6 @@ void OnFatalError(const char* location, const char* message); void PrintErrorString(const char* format, ...); -void ReportException(Environment* env, const v8::TryCatch& try_catch); - -void ReportException(Environment* env, - Local<Value> er, - Local<Message> message); - -void FatalException(v8::Isolate* isolate, - Local<Value> error, - Local<Message> message); - -void FatalException(v8::Isolate* isolate, - Local<Value> error, - Local<Message> message, - bool from_promise); - // Helpers to construct errors similar to the ones provided by // lib/internal/errors.js. // Example: with `V(ERR_INVALID_ARG_TYPE, TypeError)`, there will be @@ -190,14 +175,24 @@ class TryCatchScope : public v8::TryCatch { CatchMode mode_; }; +// Trigger the global uncaught exception handler `process._fatalException` +// in JS land (which emits the 'uncaughtException' event). If that returns +// true, continue program execution, otherwise exit the process. +void TriggerUncaughtException(v8::Isolate* isolate, + const v8::TryCatch& try_catch); +void TriggerUncaughtException(v8::Isolate* isolate, + Local<Value> error, + Local<Message> message, + bool from_promise = false); + const char* errno_string(int errorno); void PerIsolateMessageListener(v8::Local<v8::Message> message, v8::Local<v8::Value> error); -} // namespace errors - void DecorateErrorStack(Environment* env, const errors::TryCatchScope& try_catch); +} // namespace errors + } // namespace node #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS |
