Avoid logger data race. (#4284)

Also defer promise channel close.
This commit is contained in:
Raja Subramanian
2026-02-04 01:35:44 +05:30
committed by GitHub
parent 9701662757
commit a9849340c3
2 changed files with 8 additions and 7 deletions

View File

@@ -1464,7 +1464,6 @@ func (b *BufferBase) seedKeyFrame(keyFrameSeederGeneration int32) {
//
// send gratuitous PLIs for some time or until a key frame is seen to
// get the engine rolling
b.logger.Debugw("starting key frame seeder", "generation", keyFrameSeederGeneration)
timer := time.NewTimer(30 * time.Second)
defer timer.Stop()
@@ -1474,16 +1473,18 @@ func (b *BufferBase) seedKeyFrame(keyFrameSeederGeneration int32) {
initialCount := uint32(0)
b.RLock()
rtpStats := b.rtpStats
lgr := b.logger
b.RUnlock()
lgr.Debugw("starting key frame seeder", "generation", keyFrameSeederGeneration)
if rtpStats == nil {
b.logger.Debugw("cannot do key frame seeding without stats", "generation", keyFrameSeederGeneration)
lgr.Debugw("cannot do key frame seeding without stats", "generation", keyFrameSeederGeneration)
return
}
initialCount, _ = rtpStats.KeyFrame()
for {
if b.isClosed.Load() || b.keyFrameSeederGeneration.Load() != keyFrameSeederGeneration {
b.logger.Debugw(
lgr.Debugw(
"stopping key frame seeder: stopped",
"generation", keyFrameSeederGeneration,
"currentGeneration", b.keyFrameSeederGeneration.Load(),
@@ -1493,13 +1494,13 @@ func (b *BufferBase) seedKeyFrame(keyFrameSeederGeneration int32) {
select {
case <-timer.C:
b.logger.Debugw("stopping key frame seeder: timeout", "generation", keyFrameSeederGeneration)
lgr.Debugw("stopping key frame seeder: timeout", "generation", keyFrameSeederGeneration)
return
case <-ticker.C:
cnt, last := rtpStats.KeyFrame()
if cnt > initialCount {
b.logger.Debugw(
lgr.Debugw(
"stopping key frame seeder: received key frame",
"generation", keyFrameSeederGeneration,
"keyFrameCountInitial", initialCount,

View File

@@ -706,6 +706,8 @@ func (r *ReceiverBase) GetOrCreateBuffer(layer int32) buffer.BufferProvider {
ti := utils.CloneProto(r.trackInfo)
r.bufferMu.Unlock()
defer close(bp.ready)
buff, err := r.params.OnNewBufferNeeded(layer, ti)
if err != nil {
r.params.Logger.Errorw("could not create buffer", err)
@@ -714,7 +716,6 @@ func (r *ReceiverBase) GetOrCreateBuffer(layer int32) buffer.BufferProvider {
r.bufferPromises[layer] = nil
r.bufferMu.Unlock()
close(bp.ready)
return nil
}
@@ -724,7 +725,6 @@ func (r *ReceiverBase) GetOrCreateBuffer(layer int32) buffer.BufferProvider {
r.bufferMu.Unlock()
r.setupBuffer(buff, layer, rtt)
close(bp.ready)
return buff
}