mirror of
https://github.com/nodejs/node.git
synced 2025-08-16 22:28:51 +02: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
4 changed files with 19 additions and 4 deletions
|
@ -911,10 +911,11 @@ void Environment::InitializeLibuv() {
|
||||||
StartProfilerIdleNotifier();
|
StartProfilerIdleNotifier();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Environment::ExitEnv() {
|
void Environment::ExitEnv(StopFlags::Flags flags) {
|
||||||
// Should not access non-thread-safe methods here.
|
// Should not access non-thread-safe methods here.
|
||||||
set_stopping(true);
|
set_stopping(true);
|
||||||
isolate_->TerminateExecution();
|
if ((flags & StopFlags::kDoNotTerminateIsolate) == 0)
|
||||||
|
isolate_->TerminateExecution();
|
||||||
SetImmediateThreadsafe([](Environment* env) {
|
SetImmediateThreadsafe([](Environment* env) {
|
||||||
env->set_can_call_into_js(false);
|
env->set_can_call_into_js(false);
|
||||||
uv_stop(env->event_loop());
|
uv_stop(env->event_loop());
|
||||||
|
|
|
@ -636,7 +636,7 @@ class Environment : public MemoryRetainer {
|
||||||
void RegisterHandleCleanups();
|
void RegisterHandleCleanups();
|
||||||
void CleanupHandles();
|
void CleanupHandles();
|
||||||
void Exit(ExitCode code);
|
void Exit(ExitCode code);
|
||||||
void ExitEnv();
|
void ExitEnv(StopFlags::Flags flags);
|
||||||
|
|
||||||
// Register clean-up cb to be called on environment destruction.
|
// Register clean-up cb to be called on environment destruction.
|
||||||
inline void RegisterHandleCleanup(uv_handle_t* handle,
|
inline void RegisterHandleCleanup(uv_handle_t* handle,
|
||||||
|
|
|
@ -1254,7 +1254,11 @@ int Start(int argc, char** argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int Stop(Environment* env) {
|
int Stop(Environment* env) {
|
||||||
env->ExitEnv();
|
return Stop(env, StopFlags::kNoFlags);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Stop(Environment* env, StopFlags::Flags flags) {
|
||||||
|
env->ExitEnv(flags);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
10
src/node.h
10
src/node.h
|
@ -273,6 +273,15 @@ enum Flags : uint32_t {
|
||||||
} // namespace ProcessInitializationFlags
|
} // namespace ProcessInitializationFlags
|
||||||
namespace ProcessFlags = ProcessInitializationFlags; // Legacy alias.
|
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 {
|
class NODE_EXTERN InitializationResult {
|
||||||
public:
|
public:
|
||||||
virtual ~InitializationResult();
|
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
|
// Tear down Node.js while it is running (there are active handles
|
||||||
// in the loop and / or actively executing JavaScript code).
|
// in the loop and / or actively executing JavaScript code).
|
||||||
NODE_EXTERN int Stop(Environment* env);
|
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
|
// 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
|
// from argv, fill exec_argv, and possibly add errors resulting from parsing
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue