Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/fix_publisher_dc_closed_unexpectedly.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
livekit: patch
livekit-ffi: patch
---

Don't log an expected publisher data channel close as unexpected - #1224 (@longcw)
14 changes: 13 additions & 1 deletion livekit/src/rtc_engine/rtc_session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -413,6 +413,9 @@ struct SessionInner {
dt_packet_tx: DataTrackSendQueue,

closed: AtomicBool,
// Set on a terminal disconnect (server `Leave{Disconnect}`) so the publisher
// data-channel close it triggers isn't logged as unexpected
disconnecting: AtomicBool,
emitter: SessionEmitter,

options: EngineOptions,
Expand Down Expand Up @@ -617,6 +620,7 @@ impl RtcSession {
sub_data_track_dc: Mutex::new(None),
dt_packet_tx,
closed: Default::default(),
disconnecting: Default::default(),
emitter,
options,
negotiation_debouncer: Default::default(),
Expand All @@ -642,7 +646,10 @@ impl RtcSession {
let Some(inner) = weak_inner.upgrade() else {
return;
};
if !inner.closed.load(Ordering::Acquire) && inner.publisher_pc.is_connected() {
if !inner.closed.load(Ordering::Acquire)
&& !inner.disconnecting.load(Ordering::Acquire)
&& inner.publisher_pc.is_connected()
{
log::error!("publisher data channel '{}' closed unexpectedly", label);
}
})));
Expand Down Expand Up @@ -1876,6 +1883,11 @@ impl SessionInner {
action: proto::leave_request::Action,
retry_now: bool,
) {
// A terminal disconnect (e.g. room deleted) closes the publisher data channels
// from the remote side; flag it so that close isn't logged as unexpected
if action == proto::leave_request::Action::Disconnect {
self.disconnecting.store(true, Ordering::Release);
}
let _ = self.emitter.send(SessionEvent::Close {
source: source.to_owned(),
reason,
Expand Down
Loading