mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-09-18 10:21:03 +03:00
webrtc: close without an await point; do not report an unknown path as direct
- close_webrtc is no longer async (hbb_common 88f965f), so the ten call sites in port_forward and io_loop - all inside select! arms or futures the UI can abandon - can no longer be cancelled mid-teardown, which left the pc unclosable and its session entry stranded. Client's own spawn_close_webrtc went with it: the runtime-teardown guard it existed for now lives in close_detached, so both Drop paths share one implementation. - webrtc_relayed() returns None when no candidate pair is selected or the pc closed under a concurrent teardown, and both call sites read that as "not relayed", i.e. direct. A TURN-relayed session could therefore be shown to the user as peer-to-peer. Claiming a direct path needs evidence of one, so an unknown answer now counts as relayed. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ExUfAkYbq8UC9pQCiLy8TQ
This commit is contained in:
@@ -198,7 +198,7 @@ impl<T: InvokeUiSession> Remote<T> {
|
||||
self.handle_disconnected(round);
|
||||
// Close the WebRTC pc on this decline path too (no-op for TCP/WS); otherwise its
|
||||
// pc lingers in the global session cache until ICE decays on its own.
|
||||
peer.close_webrtc().await;
|
||||
peer.close_webrtc();
|
||||
return;
|
||||
}
|
||||
self.handler.update_direct(Some(direct));
|
||||
@@ -348,7 +348,7 @@ impl<T: InvokeUiSession> Remote<T> {
|
||||
// Close the WebRTC peer connection (if this session used it) so its pc is not left
|
||||
// lingering in the global session cache after the session ends; dropping `peer`
|
||||
// alone does not release it. No-op for TCP/WebSocket transports.
|
||||
peer.close_webrtc().await;
|
||||
peer.close_webrtc();
|
||||
// Stop client audio server.
|
||||
if let Some(s) = self.stop_voice_call_sender.take() {
|
||||
s.send(()).ok();
|
||||
|
||||
Reference in New Issue
Block a user