From 5d5ac23bb77e9cef477fe5df6f4ba339af48364f Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Sat, 22 Dec 2018 03:01:28 +0100 Subject: [PATCH] src: do not leak NodeTraceStateObserver This would otherwise be reported as a memory leak by automated tools. PR-URL: https://github.com/nodejs/node/pull/25180 Reviewed-By: Richard Lau Reviewed-By: Joyee Cheung --- src/node.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/node.cc b/src/node.cc index fa394cb7727cec..567925bbe1baaf 100644 --- a/src/node.cc +++ b/src/node.cc @@ -258,7 +258,6 @@ class NodeTraceStateObserver : // This only runs the first time tracing is enabled controller_->RemoveTraceStateObserver(this); - delete this; } void OnTraceDisabled() override { @@ -280,8 +279,10 @@ static struct { void Initialize(int thread_pool_size) { tracing_agent_.reset(new tracing::Agent()); node::tracing::TraceEventHelper::SetAgent(tracing_agent_.get()); - auto controller = tracing_agent_->GetTracingController(); - controller->AddTraceStateObserver(new NodeTraceStateObserver(controller)); + node::tracing::TracingController* controller = + tracing_agent_->GetTracingController(); + trace_state_observer_.reset(new NodeTraceStateObserver(controller)); + controller->AddTraceStateObserver(trace_state_observer_.get()); StartTracingAgent(); // Tracing must be initialized before platform threads are created. platform_ = new NodePlatform(thread_pool_size, controller); @@ -295,6 +296,7 @@ static struct { // Destroy tracing after the platform (and platform threads) have been // stopped. tracing_agent_.reset(nullptr); + trace_state_observer_.reset(nullptr); } void DrainVMTasks(Isolate* isolate) { @@ -345,6 +347,7 @@ static struct { return platform_; } + std::unique_ptr trace_state_observer_; std::unique_ptr tracing_agent_; tracing::AgentWriterHandle tracing_file_writer_; NodePlatform* platform_;