From bafd80883ce2b7ac8f92f31119243af1473269f3 Mon Sep 17 00:00:00 2001 From: Clemens Hammacher Date: Tue, 22 Jan 2019 13:44:33 +0100 Subject: [PATCH] src: ensure no more platform foreground tasks after Deinit Node first calls `Isolate::Dispose`, then `NodePlatform::UnregisterIsolate`. This again calls `PerIsolatePlatformData::Shutdown`, which (before this patch) called `FlushForegroundTasksInternal`, which might call `RunForegroundTask` if it finds foreground tasks to be executed. This will fail however, since `Isolate::GetCurrent` was already reset during `Isolate::Dispose`. Hence remove the check to `FlushForegroundTasksInternal` and add checks instead that no more foreground tasks are scheduled. Refs: https://github.com/v8/node/pull/86 PR-URL: https://github.com/nodejs/node/pull/25653 Reviewed-By: Gus Caplan Reviewed-By: Colin Ihrig --- src/node_platform.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/node_platform.cc b/src/node_platform.cc index 047cb432689..797d4d9cbb0 100644 --- a/src/node_platform.cc +++ b/src/node_platform.cc @@ -265,7 +265,8 @@ void PerIsolatePlatformData::Shutdown() { if (flush_tasks_ == nullptr) return; - while (FlushForegroundTasksInternal()) {} + CHECK_NULL(foreground_delayed_tasks_.Pop()); + CHECK_NULL(foreground_tasks_.Pop()); CancelPendingDelayedTasks(); uv_close(reinterpret_cast(flush_tasks_),