From 821bb82ff1a8df19bd42a37920ef691adcd69c5a Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Mon, 10 Jun 2024 12:24:29 +0200 Subject: [PATCH] Fix race condition in test In TestPeerConnection_Zero_PayloadType, WriteSample might be called after closePairNow, resulting in failure. This patch fixes the issue. --- peerconnection_media_test.go | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/peerconnection_media_test.go b/peerconnection_media_test.go index 43bdd7ed429..1a56dfb4bb7 100644 --- a/peerconnection_media_test.go +++ b/peerconnection_media_test.go @@ -1752,26 +1752,28 @@ func TestPeerConnection_Zero_PayloadType(t *testing.T) { assert.NoError(t, signalPair(pcOffer, pcAnswer)) - onTrackFired, onTrackFiredCancel := context.WithCancel(context.Background()) + trackFired := make(chan struct{}) + pcAnswer.OnTrack(func(track *TrackRemote, _ *RTPReceiver) { require.Equal(t, track.Codec().MimeType, MimeTypePCMU) - onTrackFiredCancel() + close(trackFired) }) - go func() { + func() { ticker := time.NewTicker(20 * time.Millisecond) defer ticker.Stop() - select { - case <-onTrackFired.Done(): - return - case <-ticker.C: - if routineErr := audioTrack.WriteSample(media.Sample{Data: []byte{0x00}, Duration: time.Second}); routineErr != nil { - fmt.Println(routineErr) + for { + select { + case <-trackFired: + return + case <-ticker.C: + if routineErr := audioTrack.WriteSample(media.Sample{Data: []byte{0x00}, Duration: time.Second}); routineErr != nil { + fmt.Println(routineErr) + } } } }() - <-onTrackFired.Done() closePairNow(t, pcOffer, pcAnswer) }