mirror of
https://github.com/nodejs/node.git
synced 2025-04-30 15:41:06 +00:00
src: allow optional Isolate termination in node::Stop()
PR-URL: https://github.com/nodejs/node/pull/46583 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
This commit is contained in:
parent
0084fc7994
commit
c566a04c86
@ -911,10 +911,11 @@ void Environment::InitializeLibuv() {
|
||||
StartProfilerIdleNotifier();
|
||||
}
|
||||
|
||||
void Environment::ExitEnv() {
|
||||
void Environment::ExitEnv(StopFlags::Flags flags) {
|
||||
// Should not access non-thread-safe methods here.
|
||||
set_stopping(true);
|
||||
isolate_->TerminateExecution();
|
||||
if ((flags & StopFlags::kDoNotTerminateIsolate) == 0)
|
||||
isolate_->TerminateExecution();
|
||||
SetImmediateThreadsafe([](Environment* env) {
|
||||
env->set_can_call_into_js(false);
|
||||
uv_stop(env->event_loop());
|
||||
|
@ -636,7 +636,7 @@ class Environment : public MemoryRetainer {
|
||||
void RegisterHandleCleanups();
|
||||
void CleanupHandles();
|
||||
void Exit(ExitCode code);
|
||||
void ExitEnv();
|
||||
void ExitEnv(StopFlags::Flags flags);
|
||||
|
||||
// Register clean-up cb to be called on environment destruction.
|
||||
inline void RegisterHandleCleanup(uv_handle_t* handle,
|
||||
|
@ -1254,7 +1254,11 @@ int Start(int argc, char** argv) {
|
||||
}
|
||||
|
||||
int Stop(Environment* env) {
|
||||
env->ExitEnv();
|
||||
return Stop(env, StopFlags::kNoFlags);
|
||||
}
|
||||
|
||||
int Stop(Environment* env, StopFlags::Flags flags) {
|
||||
env->ExitEnv(flags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
10
src/node.h
10
src/node.h
@ -273,6 +273,15 @@ enum Flags : uint32_t {
|
||||
} // namespace ProcessInitializationFlags
|
||||
namespace ProcessFlags = ProcessInitializationFlags; // Legacy alias.
|
||||
|
||||
namespace StopFlags {
|
||||
enum Flags : uint32_t {
|
||||
kNoFlags = 0,
|
||||
// Do not explicitly terminate the Isolate
|
||||
// when exiting the Environment.
|
||||
kDoNotTerminateIsolate = 1 << 0,
|
||||
};
|
||||
} // namespace StopFlags
|
||||
|
||||
class NODE_EXTERN InitializationResult {
|
||||
public:
|
||||
virtual ~InitializationResult();
|
||||
@ -309,6 +318,7 @@ NODE_EXTERN int Start(int argc, char* argv[]);
|
||||
// Tear down Node.js while it is running (there are active handles
|
||||
// in the loop and / or actively executing JavaScript code).
|
||||
NODE_EXTERN int Stop(Environment* env);
|
||||
NODE_EXTERN int Stop(Environment* env, StopFlags::Flags flags);
|
||||
|
||||
// Set up per-process state needed to run Node.js. This will consume arguments
|
||||
// from argv, fill exec_argv, and possibly add errors resulting from parsing
|
||||
|
Loading…
Reference in New Issue
Block a user