Skip to content

Commit c566a04

Browse files
authored
src: allow optional Isolate termination in node::Stop()
PR-URL: #46583 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Joyee Cheung <[email protected]>
1 parent 0084fc7 commit c566a04

File tree

4 files changed

+19
-4
lines changed

4 files changed

+19
-4
lines changed

src/env.cc

+3-2
Original file line numberDiff line numberDiff line change
@@ -911,10 +911,11 @@ void Environment::InitializeLibuv() {
911911
StartProfilerIdleNotifier();
912912
}
913913

914-
void Environment::ExitEnv() {
914+
void Environment::ExitEnv(StopFlags::Flags flags) {
915915
// Should not access non-thread-safe methods here.
916916
set_stopping(true);
917-
isolate_->TerminateExecution();
917+
if ((flags & StopFlags::kDoNotTerminateIsolate) == 0)
918+
isolate_->TerminateExecution();
918919
SetImmediateThreadsafe([](Environment* env) {
919920
env->set_can_call_into_js(false);
920921
uv_stop(env->event_loop());

src/env.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,7 @@ class Environment : public MemoryRetainer {
636636
void RegisterHandleCleanups();
637637
void CleanupHandles();
638638
void Exit(ExitCode code);
639-
void ExitEnv();
639+
void ExitEnv(StopFlags::Flags flags);
640640

641641
// Register clean-up cb to be called on environment destruction.
642642
inline void RegisterHandleCleanup(uv_handle_t* handle,

src/node.cc

+5-1
Original file line numberDiff line numberDiff line change
@@ -1254,7 +1254,11 @@ int Start(int argc, char** argv) {
12541254
}
12551255

12561256
int Stop(Environment* env) {
1257-
env->ExitEnv();
1257+
return Stop(env, StopFlags::kNoFlags);
1258+
}
1259+
1260+
int Stop(Environment* env, StopFlags::Flags flags) {
1261+
env->ExitEnv(flags);
12581262
return 0;
12591263
}
12601264

src/node.h

+10
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,15 @@ enum Flags : uint32_t {
273273
} // namespace ProcessInitializationFlags
274274
namespace ProcessFlags = ProcessInitializationFlags; // Legacy alias.
275275

276+
namespace StopFlags {
277+
enum Flags : uint32_t {
278+
kNoFlags = 0,
279+
// Do not explicitly terminate the Isolate
280+
// when exiting the Environment.
281+
kDoNotTerminateIsolate = 1 << 0,
282+
};
283+
} // namespace StopFlags
284+
276285
class NODE_EXTERN InitializationResult {
277286
public:
278287
virtual ~InitializationResult();
@@ -309,6 +318,7 @@ NODE_EXTERN int Start(int argc, char* argv[]);
309318
// Tear down Node.js while it is running (there are active handles
310319
// in the loop and / or actively executing JavaScript code).
311320
NODE_EXTERN int Stop(Environment* env);
321+
NODE_EXTERN int Stop(Environment* env, StopFlags::Flags flags);
312322

313323
// Set up per-process state needed to run Node.js. This will consume arguments
314324
// from argv, fill exec_argv, and possibly add errors resulting from parsing

0 commit comments

Comments
 (0)