From d7511c196a1e4dbd7eb0c91acf13672546b9cc15 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Sat, 22 Dec 2018 03:01:28 +0100 Subject: [PATCH 1/2] src: do not leak NodeTraceStateObserver This would otherwise be reported as a memory leak by automated tools. --- src/node.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/node.cc b/src/node.cc index 9bd2ac9ff6f920..570939869f63c0 100644 --- a/src/node.cc +++ b/src/node.cc @@ -220,8 +220,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); @@ -235,6 +237,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) { @@ -287,6 +290,7 @@ static struct { return platform_; } + std::unique_ptr trace_state_observer_; std::unique_ptr tracing_agent_; tracing::AgentWriterHandle tracing_file_writer_; NodePlatform* platform_; From 01c0c3ce059a1d0f5287826dbe5156f1dfe72d74 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Sat, 22 Dec 2018 21:57:20 +0100 Subject: [PATCH 2/2] fixup! src: do not leak NodeTraceStateObserver --- src/node.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/src/node.cc b/src/node.cc index 570939869f63c0..68a1f665e882a9 100644 --- a/src/node.cc +++ b/src/node.cc @@ -198,7 +198,6 @@ class NodeTraceStateObserver : // This only runs the first time tracing is enabled controller_->RemoveTraceStateObserver(this); - delete this; } void OnTraceDisabled() override {