|
|
|
@ -316,27 +316,29 @@ auto ChaoticGoodClientTransport::CallOutboundLoop(uint32_t stream_id, |
|
|
|
|
void ChaoticGoodClientTransport::StartCall(CallHandler call_handler) { |
|
|
|
|
// At this point, the connection is set up.
|
|
|
|
|
// Start sending data frames.
|
|
|
|
|
call_handler.SpawnGuarded("outbound_loop", [this, call_handler]() mutable { |
|
|
|
|
const uint32_t stream_id = MakeStream(call_handler); |
|
|
|
|
return Map(CallOutboundLoop(stream_id, call_handler), |
|
|
|
|
[stream_id, sender = outgoing_frames_.MakeSender()]( |
|
|
|
|
absl::Status result) mutable { |
|
|
|
|
GRPC_TRACE_LOG(chaotic_good, INFO) |
|
|
|
|
<< "CHAOTIC_GOOD: Call " << stream_id << " finished with " |
|
|
|
|
<< result.ToString(); |
|
|
|
|
if (!result.ok()) { |
|
|
|
|
GRPC_TRACE_LOG(chaotic_good, INFO) |
|
|
|
|
<< "CHAOTIC_GOOD: Send cancel"; |
|
|
|
|
CancelFrame frame; |
|
|
|
|
frame.stream_id = stream_id; |
|
|
|
|
if (!sender.UnbufferedImmediateSend(std::move(frame))) { |
|
|
|
|
call_handler.SpawnGuarded( |
|
|
|
|
"outbound_loop", [self = RefAsSubclass<ChaoticGoodClientTransport>(), |
|
|
|
|
call_handler]() mutable { |
|
|
|
|
const uint32_t stream_id = self->MakeStream(call_handler); |
|
|
|
|
return Map(self->CallOutboundLoop(stream_id, call_handler), |
|
|
|
|
[stream_id, sender = self->outgoing_frames_.MakeSender()]( |
|
|
|
|
absl::Status result) mutable { |
|
|
|
|
GRPC_TRACE_LOG(chaotic_good, INFO) |
|
|
|
|
<< "CHAOTIC_GOOD: Send cancel failed"; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return result; |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
<< "CHAOTIC_GOOD: Call " << stream_id |
|
|
|
|
<< " finished with " << result.ToString(); |
|
|
|
|
if (!result.ok()) { |
|
|
|
|
GRPC_TRACE_LOG(chaotic_good, INFO) |
|
|
|
|
<< "CHAOTIC_GOOD: Send cancel"; |
|
|
|
|
CancelFrame frame; |
|
|
|
|
frame.stream_id = stream_id; |
|
|
|
|
if (!sender.UnbufferedImmediateSend(std::move(frame))) { |
|
|
|
|
GRPC_TRACE_LOG(chaotic_good, INFO) |
|
|
|
|
<< "CHAOTIC_GOOD: Send cancel failed"; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return result; |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void ChaoticGoodClientTransport::PerformOp(grpc_transport_op* op) { |
|
|
|
|