diff --git a/pkg/rtc/room.go b/pkg/rtc/room.go index f6169afa4..5bba9e299 100644 --- a/pkg/rtc/room.go +++ b/pkg/rtc/room.go @@ -849,6 +849,7 @@ func (r *Room) pushAndDequeueUpdates(pi *livekit.ParticipantInfo, isImmediate bo var updates []*livekit.ParticipantInfo identity := livekit.ParticipantIdentity(pi.Identity) existing := r.batchedUpdates[identity] + shouldSend := isImmediate || pi.IsPublisher if existing != nil { if pi.Sid != existing.Sid { @@ -859,10 +860,12 @@ func (r *Room) pushAndDequeueUpdates(pi *livekit.ParticipantInfo, isImmediate bo } else if pi.Version < existing.Version { // out of order update return nil + } else if shouldSend { + updates = append(updates, existing) } } - if isImmediate || pi.IsPublisher { + if shouldSend { // include any queued update, and return delete(r.batchedUpdates, identity) updates = append(updates, pi) diff --git a/pkg/rtc/room_test.go b/pkg/rtc/room_test.go index ba2cc8a7c..b70336938 100644 --- a/pkg/rtc/room_test.go +++ b/pkg/rtc/room_test.go @@ -295,7 +295,7 @@ func TestPushAndDequeueUpdates(t *testing.T) { name: "when switching to publisher, queue is cleared", pi: publisher1v2, existing: subscriber1v1, - expected: []*livekit.ParticipantInfo{publisher1v2}, + expected: []*livekit.ParticipantInfo{subscriber1v1, publisher1v2}, validate: func(t *testing.T, rm *Room, updates []*livekit.ParticipantInfo) { require.Empty(t, rm.batchedUpdates) },