Skip to content

Commit

Permalink
worker: only stop inspector if started
Browse files Browse the repository at this point in the history
This may fix some flakiness with tests that use `worker.terminate()`.
In particular, the following failure seems like it could be related
(no consistent reproduction available, though):

```
15:30:14 not ok 187 parallel/test-heapdump-worker
15:30:14   ---
15:30:14   duration_ms: 2.499
15:30:14   severity: fail
15:30:14   exitcode: 134
15:30:14   stack: |-
15:30:14     npm[6904]: src\inspector_agent.cc:729: Assertion `(client_) != nullptr' failed.
```

From https://ci.nodejs.org/job/node-test-binary-windows/20041/COMPILED_BY=vs2017,RUNNER=win2016,RUN_SUBSET=2/console

Refs: #22769

PR-URL: #22927
Reviewed-By: Denys Otrishko <shishugi@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Eugene Ostroukhov <eostroukhov@google.com>
  • Loading branch information
addaleax authored and targos committed Sep 25, 2018
1 parent 1c3a2eb commit b5889d0
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions src/node_worker.cc
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ void Worker::Run() {
TRACE_STR_COPY(name.c_str()));
MultiIsolatePlatform* platform = isolate_data_->platform();
CHECK_NE(platform, nullptr);
bool inspector_started = false;

Debug(this, "Starting worker with id %llu", thread_id_);
{
Expand Down Expand Up @@ -163,6 +164,9 @@ void Worker::Run() {
}

if (!is_stopped()) {
StartWorkerInspector(env_.get(), url_);
inspector_started = true;

HandleScope handle_scope(isolate_);
Environment::AsyncCallbackScope callback_scope(env_.get());
env_->async_hooks()->push_async_ids(1, 0);
Expand All @@ -171,7 +175,6 @@ void Worker::Run() {
env_->async_hooks()->pop_async_id(1);

Debug(this, "Loaded environment for worker %llu", thread_id_);
StartWorkerInspector(env_.get(), url_);
}

{
Expand Down Expand Up @@ -232,7 +235,8 @@ void Worker::Run() {
env_->stop_sub_worker_contexts();
env_->RunCleanup();
RunAtExit(env_.get());
WaitForWorkerInspectorToStop(env_.get());
if (inspector_started)
WaitForWorkerInspectorToStop(env_.get());

{
Mutex::ScopedLock stopped_lock(stopped_mutex_);
Expand Down

0 comments on commit b5889d0

Please sign in to comment.