Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 94617f1

Browse files
ac-patelcopybara-github
authored andcommitted
[PH2] Add UntilTransportClosed for all the eternal loops.
PiperOrigin-RevId: 808564533
1 parent 4207596 commit 94617f1

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed

src/core/ext/transport/chttp2/transport/http2_client_transport.cc

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -728,7 +728,8 @@ auto Http2ClientTransport::SerializeAndWrite(std::vector<Http2Frame>&& frames) {
728728

729729
auto Http2ClientTransport::MultiplexerLoop() {
730730
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport MultiplexerLoop Factory";
731-
return Loop([self = RefAsSubclass<Http2ClientTransport>()]() {
731+
return AssertResultType<
732+
absl::Status>(Loop([self = RefAsSubclass<Http2ClientTransport>()]() {
732733
self->write_bytes_remaining_ = self->GetMaxWriteSize();
733734
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport MultiplexerLoop "
734735
<< " max_write_size_=" << self->GetMaxWriteSize();
@@ -875,7 +876,7 @@ auto Http2ClientTransport::MultiplexerLoop() {
875876
}
876877
return Continue();
877878
});
878-
});
879+
}));
879880
}
880881

881882
auto Http2ClientTransport::OnMultiplexerLoopEnded() {
@@ -962,10 +963,11 @@ Http2ClientTransport::Http2ClientTransport(
962963
general_party_arena->SetContext<EventEngine>(event_engine.get());
963964
general_party_ = Party::Make(std::move(general_party_arena));
964965

965-
general_party_->Spawn("ReadLoop", ReadLoop(), OnReadLoopEnded());
966-
general_party_->Spawn("MultiplexerLoop", MultiplexerLoop(),
966+
general_party_->Spawn("ReadLoop", UntilTransportClosed(ReadLoop()),
967+
OnReadLoopEnded());
968+
general_party_->Spawn("MultiplexerLoop",
969+
UntilTransportClosed(MultiplexerLoop()),
967970
OnMultiplexerLoopEnded());
968-
969971
// The keepalive loop is only spawned if the keepalive time is not infinity.
970972
keepalive_manager_.Spawn(general_party_.get());
971973

@@ -1102,6 +1104,8 @@ void Http2ClientTransport::BeginCloseStream(
11021104

11031105
void Http2ClientTransport::CloseTransport() {
11041106
GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::CloseTransport";
1107+
1108+
transport_closed_latch_.Set();
11051109
// This is the only place where the general_party_ is
11061110
// reset.
11071111
general_party_.reset();

src/core/ext/transport/chttp2/transport/http2_client_transport.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,17 @@ class Http2ClientTransport final : public ClientTransport {
277277
HPackCompressor encoder_;
278278
HPackParser parser_;
279279
bool is_transport_closed_ ABSL_GUARDED_BY(transport_mutex_) = false;
280+
Latch<void> transport_closed_latch_;
281+
282+
template <typename Promise>
283+
auto UntilTransportClosed(Promise promise) {
284+
return Race(Map(transport_closed_latch_.Wait(),
285+
[](Empty) {
286+
GRPC_HTTP2_CLIENT_DLOG << "Transport closed";
287+
return absl::CancelledError("Transport closed");
288+
}),
289+
std::move(promise));
290+
}
280291

281292
ConnectivityStateTracker state_tracker_ ABSL_GUARDED_BY(transport_mutex_){
282293
"http2_client", GRPC_CHANNEL_READY};

0 commit comments

Comments
 (0)