diff --git a/src/core/lib/transport/call_spine.cc b/src/core/lib/transport/call_spine.cc index 881333126b9..99270ae09d1 100644 --- a/src/core/lib/transport/call_spine.cc +++ b/src/core/lib/transport/call_spine.cc @@ -96,6 +96,7 @@ CallInitiatorAndHandler MakeCallPair( ClientMetadataHandle client_initial_metadata, grpc_event_engine::experimental::EventEngine* event_engine, RefCountedPtr arena, grpc_call_context_element* legacy_context) { + CHECK_NE(arena.get(), nullptr); auto spine = CallSpine::Create(std::move(client_initial_metadata), event_engine, std::move(arena), legacy_context); diff --git a/src/core/lib/transport/call_spine.h b/src/core/lib/transport/call_spine.h index eb1ce957e11..ca5efc9c49b 100644 --- a/src/core/lib/transport/call_spine.h +++ b/src/core/lib/transport/call_spine.h @@ -266,7 +266,7 @@ class CallSpine final : public CallSpineInterface, public Party { RefCountedPtr arena, grpc_call_context_element* legacy_context) { return RefCountedPtr( arena->New(std::move(client_initial_metadata), event_engine, - std::move(arena), legacy_context)); + arena, legacy_context)); } ~CallSpine() override { @@ -373,8 +373,8 @@ class CallSpine final : public CallSpineInterface, public Party { call_filters_(std::move(client_initial_metadata)), event_engine_(event_engine) { if (legacy_context == nullptr) { - legacy_context_ = static_cast( - arena->Alloc(sizeof(grpc_call_context_element) * GRPC_CONTEXT_COUNT)); + legacy_context_ = static_cast(arena_->Alloc( + sizeof(grpc_call_context_element) * GRPC_CONTEXT_COUNT)); memset(legacy_context_, 0, sizeof(grpc_call_context_element) * GRPC_CONTEXT_COUNT); legacy_context_is_owned_ = true; @@ -405,10 +405,11 @@ class CallSpine final : public CallSpineInterface, public Party { } void PartyOver() override { + auto arena = arena_; { ScopedContext context(this); CancelRemainingParticipants(); - arena_->DestroyManagedNewObjects(); + arena->DestroyManagedNewObjects(); } this->~CallSpine(); }