Skip to content

Commit feaa215

Browse files
committed
[OTel C++] Fix crash when using TcpCallTracer
1 parent 167cb27 commit feaa215

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

src/cpp/ext/otel/otel_client_call_tracer.cc

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,14 +77,18 @@ class OpenTelemetryPluginImpl::ClientCallTracer::CallAttemptTracer<
7777
call_attempt_tracer_->parent_->arena_
7878
->template GetContext<grpc_core::Call>()
7979
->InternalRef(
80-
"OpenTelemetryPluginImpl::ClientCallTracer::CallAttemptTracer");
80+
"OpenTelemetryPluginImpl::ClientCallTracer::CallAttemptTracer::"
81+
"TcpCallTracer");
8182
}
8283

8384
~TcpCallTracer() override {
84-
call_attempt_tracer_->parent_->arena_
85-
->template GetContext<grpc_core::Call>()
86-
->InternalUnref(
87-
"OpenTelemetryPluginImpl::ClientCallTracer::CallAttemptTracer");
85+
auto* arena = call_attempt_tracer_->parent_->arena_;
86+
// The CallAttemptTracer can be allocated on the arena and hence needs to be
87+
// reset before unreffing the call.
88+
call_attempt_tracer_.reset();
89+
arena->template GetContext<grpc_core::Call>()->InternalUnref(
90+
"OpenTelemetryPluginImpl::ClientCallTracer::CallAttemptTracer::~"
91+
"TcpCallTracer");
8892
}
8993

9094
void RecordEvent(grpc_event_engine::experimental::internal::WriteEvent type,

src/cpp/ext/otel/otel_server_call_tracer.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,12 @@ class OpenTelemetryPluginImpl::ServerCallTracer::TcpCallTracer
6666
}
6767

6868
~TcpCallTracer() override {
69-
server_call_tracer_->arena_->GetContext<grpc_core::Call>()->InternalUnref(
70-
"OpenTelemetryPluginImpl::ServerCallTracer::TcpCallTracer");
69+
auto* arena = server_call_tracer_->arena_;
70+
// The ServerCallTracer is allocated on the arena and hence needs to be
71+
// reset before unreffing the call.
72+
server_call_tracer_.reset();
73+
arena->GetContext<grpc_core::Call>()->InternalUnref(
74+
"OpenTelemetryPluginImpl::ServerCallTracer::~TcpCallTracer");
7175
}
7276

7377
void RecordEvent(grpc_event_engine::experimental::internal::WriteEvent type,

0 commit comments

Comments
 (0)