diff --git a/src/node_platform.cc b/src/node_platform.cc index 713051efc3fc7a..740ace1fb7895e 100644 --- a/src/node_platform.cc +++ b/src/node_platform.cc @@ -222,7 +222,7 @@ int WorkerThreadsTaskRunner::NumberOfWorkerThreads() const { PerIsolatePlatformData::PerIsolatePlatformData( Isolate* isolate, uv_loop_t* loop) - : loop_(loop) { + : isolate_(isolate), loop_(loop) { flush_tasks_ = new uv_async_t(); CHECK_EQ(0, uv_async_init(loop, flush_tasks_, FlushTasks)); flush_tasks_->data = static_cast(this); @@ -391,12 +391,11 @@ int NodePlatform::NumberOfWorkerThreads() { } void PerIsolatePlatformData::RunForegroundTask(std::unique_ptr task) { - Isolate* isolate = Isolate::GetCurrent(); - DebugSealHandleScope scope(isolate); - Environment* env = Environment::GetCurrent(isolate); + DebugSealHandleScope scope(isolate_); + Environment* env = Environment::GetCurrent(isolate_); if (env != nullptr) { - v8::HandleScope scope(isolate); - InternalCallbackScope cb_scope(env, Object::New(isolate), { 0, 0 }, + v8::HandleScope scope(isolate_); + InternalCallbackScope cb_scope(env, Object::New(isolate_), { 0, 0 }, InternalCallbackScope::kNoFlags); task->Run(); } else { @@ -415,8 +414,8 @@ void PerIsolatePlatformData::DeleteFromScheduledTasks(DelayedTask* task) { } void PerIsolatePlatformData::RunForegroundTask(uv_timer_t* handle) { - DelayedTask* delayed = static_cast(handle->data); - RunForegroundTask(std::move(delayed->task)); + DelayedTask* delayed = ContainerOf(&DelayedTask::timer, handle); + delayed->platform_data->RunForegroundTask(std::move(delayed->task)); delayed->platform_data->DeleteFromScheduledTasks(delayed); } diff --git a/src/node_platform.h b/src/node_platform.h index 79aad88b881f6b..7070761027d1f0 100644 --- a/src/node_platform.h +++ b/src/node_platform.h @@ -88,7 +88,7 @@ class PerIsolatePlatformData : void DecreaseHandleCount(); static void FlushTasks(uv_async_t* handle); - static void RunForegroundTask(std::unique_ptr task); + void RunForegroundTask(std::unique_ptr task); static void RunForegroundTask(uv_timer_t* timer); struct ShutdownCallback { @@ -101,6 +101,7 @@ class PerIsolatePlatformData : std::shared_ptr self_reference_; uint32_t uv_handle_count_ = 1; // 1 = flush_tasks_ + v8::Isolate* const isolate_; uv_loop_t* const loop_; uv_async_t* flush_tasks_ = nullptr; TaskQueue foreground_tasks_;