fix(client): handle peer-initiated session closure gracefully
This commit is contained in:
1 parent
d4976fb811
commit
e33ae1d0fc
3 files changed
+39
-3
No files matched your search
@@ -359,6 +359,9 @@ impl Client {
|
||||
break;
|
||||
}
|
||||
all_events.extend(events);
|
||||
if self.is_peer_closed() {
|
||||
break;
|
||||
}
|
||||
}
|
||||
Ok(all_events)
|
||||
}
|
||||
|
||||
@@ -224,7 +224,9 @@ fn run_client(
|
||||
&mut counters,
|
||||
client.recv_available(MANAGED_RECV_BUDGET)?,
|
||||
);
|
||||
publish_events(&hub, &mut counters, client.poll_timeouts()?);
|
||||
if !client.is_peer_closed() {
|
||||
publish_events(&hub, &mut counters, client.poll_timeouts()?);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -243,6 +245,9 @@ fn run_client(
|
||||
&mut counters,
|
||||
client.recv_available(MANAGED_RECV_BUDGET)?,
|
||||
);
|
||||
if client.is_peer_closed() {
|
||||
break;
|
||||
}
|
||||
publish_events(&hub, &mut counters, client.poll_timeouts()?);
|
||||
|
||||
if client.is_run_complete() {
|
||||
@@ -257,8 +262,10 @@ fn run_client(
|
||||
}
|
||||
|
||||
let packets_sent = client.packets_sent();
|
||||
let close_events = client.close()?;
|
||||
publish_events(&hub, &mut counters, close_events);
|
||||
if !client.is_peer_closed() {
|
||||
let close_events = client.close()?;
|
||||
publish_events(&hub, &mut counters, close_events);
|
||||
}
|
||||
|
||||
Ok(SessionOutcome {
|
||||
end_reason: if cancelled {
|
||||
@@ -295,12 +302,20 @@ fn drain_final_late_replies(
|
||||
|
||||
let deadline = Instant::now() + MANAGED_FINAL_DRAIN;
|
||||
while Instant::now() < deadline && client.has_timed_out_metadata() {
|
||||
if client.is_peer_closed() {
|
||||
break;
|
||||
}
|
||||
|
||||
let mut published = false;
|
||||
|
||||
let events = client.recv_available(MANAGED_RECV_BUDGET)?;
|
||||
published |= !events.is_empty();
|
||||
publish_events(hub, counters, events);
|
||||
|
||||
if client.is_peer_closed() {
|
||||
break;
|
||||
}
|
||||
|
||||
let events = client.poll_timeouts()?;
|
||||
published |= !events.is_empty();
|
||||
publish_events(hub, counters, events);
|
||||
|
||||
Reference in new issue
Block a user