@@ -198,7 +198,6 @@ class NodeTraceStateObserver :
198
198
199
199
// This only runs the first time tracing is enabled
200
200
controller_->RemoveTraceStateObserver (this );
201
- delete this ;
202
201
}
203
202
204
203
void OnTraceDisabled () override {
@@ -220,8 +219,10 @@ static struct {
220
219
void Initialize (int thread_pool_size) {
221
220
tracing_agent_.reset (new tracing::Agent ());
222
221
node::tracing::TraceEventHelper::SetAgent (tracing_agent_.get ());
223
- auto controller = tracing_agent_->GetTracingController ();
224
- controller->AddTraceStateObserver (new NodeTraceStateObserver (controller));
222
+ node::tracing::TracingController* controller =
223
+ tracing_agent_->GetTracingController ();
224
+ trace_state_observer_.reset (new NodeTraceStateObserver (controller));
225
+ controller->AddTraceStateObserver (trace_state_observer_.get ());
225
226
StartTracingAgent ();
226
227
// Tracing must be initialized before platform threads are created.
227
228
platform_ = new NodePlatform (thread_pool_size, controller);
@@ -235,6 +236,7 @@ static struct {
235
236
// Destroy tracing after the platform (and platform threads) have been
236
237
// stopped.
237
238
tracing_agent_.reset (nullptr );
239
+ trace_state_observer_.reset (nullptr );
238
240
}
239
241
240
242
void DrainVMTasks (Isolate* isolate) {
@@ -287,6 +289,7 @@ static struct {
287
289
return platform_;
288
290
}
289
291
292
+ std::unique_ptr<NodeTraceStateObserver> trace_state_observer_;
290
293
std::unique_ptr<tracing::Agent> tracing_agent_;
291
294
tracing::AgentWriterHandle tracing_file_writer_;
292
295
NodePlatform* platform_;
0 commit comments