35 lines
1.5 KiB
Diff
35 lines
1.5 KiB
Diff
|
|
From 590dfe7db024bea1e39b2c0e367e52b631936f7a Mon Sep 17 00:00:00 2001
|
||
|
|
From: Vijay Pai <vpai@google.com>
|
||
|
|
Date: Tue, 18 Aug 2020 00:53:09 -0700
|
||
|
|
Subject: [PATCH] Fix destruction race between subchannel and client_channel
|
||
|
|
|
||
|
|
|
||
|
|
diff --git a/src/core/ext/filters/client_channel/client_channel.cc b/src/core/ext/filters/client_channel/client_channel.cc
|
||
|
|
index 15a39b2388..1b8f2cb1df 100644
|
||
|
|
--- a/src/core/ext/filters/client_channel/client_channel.cc
|
||
|
|
+++ b/src/core/ext/filters/client_channel/client_channel.cc
|
||
|
|
@@ -2176,13 +2176,14 @@ void CallData::Destroy(grpc_call_element* elem,
|
||
|
|
const grpc_call_final_info* /*final_info*/,
|
||
|
|
grpc_closure* then_schedule_closure) {
|
||
|
|
CallData* calld = static_cast<CallData*>(elem->call_data);
|
||
|
|
- if (GPR_LIKELY(calld->subchannel_call_ != nullptr)) {
|
||
|
|
- calld->subchannel_call_->SetAfterCallStackDestroy(then_schedule_closure);
|
||
|
|
- then_schedule_closure = nullptr;
|
||
|
|
- }
|
||
|
|
+ RefCountedPtr<SubchannelCall> subchannel_call = calld->subchannel_call_;
|
||
|
|
calld->~CallData();
|
||
|
|
- // TODO(yashkt) : This can potentially be a Closure::Run
|
||
|
|
- ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, GRPC_ERROR_NONE);
|
||
|
|
+ if (GPR_LIKELY(subchannel_call != nullptr)) {
|
||
|
|
+ subchannel_call->SetAfterCallStackDestroy(then_schedule_closure);
|
||
|
|
+ } else {
|
||
|
|
+ // TODO(yashkt) : This can potentially be a Closure::Run
|
||
|
|
+ ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, GRPC_ERROR_NONE);
|
||
|
|
+ }
|
||
|
|
}
|
||
|
|
|
||
|
|
void CallData::StartTransportStreamOpBatch(
|
||
|
|
--
|
||
|
|
2.23.0
|
||
|
|
|