Skip to content

Commit

Permalink
embedding: make Stop() stop Workers
Browse files Browse the repository at this point in the history
This makes sense given that terminating execution of the parent thread
this way likely also is supposed to stop all running Worker threads
spawned by it.

PR-URL: nodejs#32531
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
addaleax committed Sep 23, 2020
1 parent 6d231db commit 93a23b9
Show file tree
Hide file tree
Showing 5 changed files with 9 additions and 8 deletions.
3 changes: 1 addition & 2 deletions src/api/environment.cc
Original file line number Diff line number Diff line change
Expand Up @@ -712,8 +712,7 @@ ThreadId AllocateEnvironmentThreadId() {
}

void DefaultProcessExitHandler(Environment* env, int exit_code) {
env->set_can_call_into_js(false);
env->stop_sub_worker_contexts();
Stop(env);
DisposePlatform();
exit(exit_code);
}
Expand Down
3 changes: 2 additions & 1 deletion src/env.cc
Original file line number Diff line number Diff line change
Expand Up @@ -523,9 +523,10 @@ void Environment::InitializeLibuv(bool start_profiler_idle_notifier) {
}
}

void Environment::ExitEnv() {
void Environment::Stop() {
set_can_call_into_js(false);
set_stopping(true);
stop_sub_worker_contexts();
isolate_->TerminateExecution();
SetImmediateThreadsafe([](Environment* env) { uv_stop(env->event_loop()); });
}
Expand Down
2 changes: 1 addition & 1 deletion src/env.h
Original file line number Diff line number Diff line change
Expand Up @@ -913,7 +913,7 @@ class Environment : public MemoryRetainer {
void RegisterHandleCleanups();
void CleanupHandles();
void Exit(int code);
void ExitEnv();
void Stop();

// Register clean-up cb to be called on environment destruction.
inline void RegisterHandleCleanup(uv_handle_t* handle,
Expand Down
2 changes: 1 addition & 1 deletion src/node.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1035,7 +1035,7 @@ int Start(int argc, char** argv) {
}

int Stop(Environment* env) {
env->ExitEnv();
env->Stop();
return 0;
}

Expand Down
7 changes: 4 additions & 3 deletions src/node.h
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,8 @@ class Environment;
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).
// in the loop and / or actively executing JavaScript code). This also stops
// all Workers that may have been started earlier.
NODE_EXTERN int Stop(Environment* env);

// TODO(addaleax): Officially deprecate this and replace it with something
Expand Down Expand Up @@ -457,8 +458,8 @@ NODE_EXTERN void FreeEnvironment(Environment* env);
// It receives the Environment* instance and the exit code as arguments.
// This could e.g. call Stop(env); in order to terminate execution and stop
// the event loop.
// The default handler disposes of the global V8 platform instance, if one is
// being used, and calls exit().
// The default handler calls Stop(), disposes of the global V8 platform
// instance, if one is being used, and calls exit().
NODE_EXTERN void SetProcessExitHandler(
Environment* env,
std::function<void(Environment*, int)>&& handler);
Expand Down

0 comments on commit 93a23b9

Please sign in to comment.