From a28c9900613f68f92f59ea3881b68c71d8e0010f Mon Sep 17 00:00:00 2001 From: Jichan Date: Wed, 8 Jan 2020 21:36:05 +0900 Subject: [PATCH] src: fix what a dispose without checking If created platform with CreatePlatform, the crash occurs because it does not check if it was initialized to v8_platform when DisposePlatform was called. Backport-PR-URL: https://github.com/nodejs/node/pull/35241 Refs: https://github.com/nodejs/node/pull/31260 Co-authored-by: Anna Henningsen PR-URL: https://github.com/nodejs/node/pull/30467 Reviewed-By: James M Snell Reviewed-By: Gireesh Punathil --- src/node_v8_platform-inl.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/node_v8_platform-inl.h b/src/node_v8_platform-inl.h index 0f4a98a98551ba..ce6d5dd223d2cb 100644 --- a/src/node_v8_platform-inl.h +++ b/src/node_v8_platform-inl.h @@ -12,6 +12,7 @@ #include "tracing/node_trace_writer.h" #include "tracing/trace_event.h" #include "tracing/traced_value.h" +#include "util.h" namespace node { @@ -79,8 +80,12 @@ class NodeTraceStateObserver }; struct V8Platform { + bool initialized_ = false; + #if NODE_USE_V8_PLATFORM inline void Initialize(int thread_pool_size) { + CHECK(!initialized_); + initialized_ = true; tracing_agent_ = std::make_unique(); node::tracing::TraceEventHelper::SetAgent(tracing_agent_.get()); node::tracing::TracingController* controller = @@ -99,6 +104,10 @@ struct V8Platform { } inline void Dispose() { + if (!initialized_) + return; + initialized_ = false; + StopTracingAgent(); platform_->Shutdown(); delete platform_;