From c45e23be3fb78f8c2f131a46141a5de76db08369 Mon Sep 17 00:00:00 2001 From: Paul Wells Date: Fri, 31 Mar 2023 00:45:50 -0700 Subject: [PATCH] store participant res sink in interface typed field (#1567) --- pkg/rtc/participant.go | 12 ++++++------ pkg/rtc/participant_signal.go | 19 ++++++------------- 2 files changed, 12 insertions(+), 19 deletions(-) diff --git a/pkg/rtc/participant.go b/pkg/rtc/participant.go index 7838f8531..3e140499c 100644 --- a/pkg/rtc/participant.go +++ b/pkg/rtc/participant.go @@ -93,12 +93,12 @@ type ParticipantParams struct { type ParticipantImpl struct { params ParticipantParams - isClosed atomic.Bool - state atomic.Value // livekit.ParticipantInfo_State - resSink atomic.Value // routing.MessageSink - resSinkValid atomic.Bool - grants *auth.ClaimGrants - isPublisher atomic.Bool + isClosed atomic.Bool + state atomic.Value // livekit.ParticipantInfo_State + resSinkMu sync.Mutex + resSink routing.MessageSink + grants *auth.ClaimGrants + isPublisher atomic.Bool // when first connected connectedAt time.Time diff --git a/pkg/rtc/participant_signal.go b/pkg/rtc/participant_signal.go index cc1c0ea62..544399a1e 100644 --- a/pkg/rtc/participant_signal.go +++ b/pkg/rtc/participant_signal.go @@ -12,22 +12,15 @@ import ( ) func (p *ParticipantImpl) getResponseSink() routing.MessageSink { - if !p.resSinkValid.Load() { - return nil - } - sink := p.resSink.Load() - if s, ok := sink.(routing.MessageSink); ok { - return s - } - return nil + p.resSinkMu.Lock() + defer p.resSinkMu.Unlock() + return p.resSink } func (p *ParticipantImpl) SetResponseSink(sink routing.MessageSink) { - p.resSinkValid.Store(sink != nil) - if sink != nil { - // cannot store nil into atomic.Value - p.resSink.Store(sink) - } + p.resSinkMu.Lock() + defer p.resSinkMu.Unlock() + p.resSink = sink } func (p *ParticipantImpl) SendJoinResponse(joinResponse *livekit.JoinResponse) error {