Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
tracing: fix TracingController cleanup
This fixes an incorrect deletion of the `TracingController` instance,
which in some environments could cause an error about an invalid
pointer passed to `free()`. The `TracingController` instance is
actually owned by a `unique_ptr` member of the platform, so calling
`platform::SetTracingController(nullptr)` is the correct way to
delete it. But before that, the `TraceBuffer` must be deleted in
order for the tracing loop to exit; that is accomplished by calling
`TracingController::Initialize(nullptr)`.
  • Loading branch information
jasongin committed Jan 5, 2017
commit ae7fca29ed5048b3efba43140fcc404d15515b6e
4 changes: 3 additions & 1 deletion src/tracing/agent.cc
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,9 @@ void Agent::Stop() {
// Perform final Flush on TraceBuffer. We don't want the tracing controller
// to flush the buffer again on destruction of the V8::Platform.
tracing_controller_->StopTracing();
delete tracing_controller_;
tracing_controller_->Initialize(nullptr);
tracing_controller_ = nullptr;

// Thread should finish when the tracing loop is stopped.
uv_thread_join(&thread_);
v8::platform::SetTracingController(platform_, nullptr);
Expand Down