From e0dceb434581aacc4d4bc6c717e6c9a4c64866a0 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Tue, 17 Sep 2019 13:52:12 +0200 Subject: [PATCH] src: discard remaining foreground tasks on platform shutdown While V8 itself should not have any remaining tasks on the queue during platform shutdown, our inspector implementation may do so. Thus, the checks verifying that no tasks are queued at that point make some of the inspector tasks flaky. Remove the checks and replace them by explicitly destroying all tasks that are left. Refs: https://github.com/nodejs/node/pull/25653 Refs: https://github.com/nodejs/node/pull/28870#issuecomment-531908090 --- src/node_platform.cc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/node_platform.cc b/src/node_platform.cc index b2e8d77ec7a987..f726382171488c 100644 --- a/src/node_platform.cc +++ b/src/node_platform.cc @@ -279,8 +279,13 @@ void PerIsolatePlatformData::Shutdown() { if (flush_tasks_ == nullptr) return; - CHECK_NULL(foreground_delayed_tasks_.Pop()); - CHECK_NULL(foreground_tasks_.Pop()); + // While there should be no V8 tasks in the queues at this point, it is + // possible that Node.js-internal tasks from e.g. the inspector are still + // lying around. We clear these queues and ignore the return value, + // effectively deleting the tasks instead of running them. + foreground_delayed_tasks_.PopAll(); + foreground_tasks_.PopAll(); + CancelPendingDelayedTasks(); ShutdownCbList* copy = new ShutdownCbList(std::move(shutdown_callbacks_));