diff --git a/.changeset/increase_data_track_event_buffer.md b/.changeset/increase_data_track_event_buffer.md new file mode 100644 index 000000000..2d4b8af78 --- /dev/null +++ b/.changeset/increase_data_track_event_buffer.md @@ -0,0 +1,9 @@ +--- +livekit-datatrack: patch +livekit: patch +livekit-uniffi: patch +livekit-capture: patch +livekit-ffi: patch +--- + +Increase the local and remote data track event buffers so a burst of track lifecycle events cannot fill the channel and deadlock room disconnect. diff --git a/livekit-datatrack/src/local/manager.rs b/livekit-datatrack/src/local/manager.rs index 5645ef2fb..e485b82d7 100644 --- a/livekit-datatrack/src/local/manager.rs +++ b/livekit-datatrack/src/local/manager.rs @@ -326,7 +326,10 @@ impl Manager { const FRAME_BUFFER_COUNT: usize = 16; /// Maximum number of input and output events to buffer. - const EVENT_BUFFER_COUNT: usize = 16; + /// + /// Must exceed a burst of track lifecycle events. A full channel blocks + /// the manager and can deadlock room disconnect. + const EVENT_BUFFER_COUNT: usize = 512; } /// Task for an individual published data track. diff --git a/livekit-datatrack/src/remote/manager.rs b/livekit-datatrack/src/remote/manager.rs index 67fb86cf4..b7a40418d 100644 --- a/livekit-datatrack/src/remote/manager.rs +++ b/livekit-datatrack/src/remote/manager.rs @@ -443,7 +443,10 @@ impl Manager { const PACKET_BUFFER_COUNT: usize = 16; /// Maximum number of input and output events to buffer. - const EVENT_BUFFER_COUNT: usize = 16; + /// + /// Must exceed a burst of track lifecycle events. A full channel blocks + /// the manager and can deadlock room disconnect. + const EVENT_BUFFER_COUNT: usize = 512; } /// Information and state for a remote data track.