Fix race (concurency) for Track

This commit is contained in:
Alexey Khit
2022-11-22 20:03:36 +03:00
parent 3d6472cfb1
commit 0e281e36d3
6 changed files with 15 additions and 24 deletions

View File

@@ -24,7 +24,7 @@ func (p *Producer) GetTrack(media *streamer.Media, codec *streamer.Codec) *strea
panic("you shall not pass!")
}
track := &streamer.Track{Codec: codec, Direction: media.Direction}
track := streamer.NewTrack(codec, media.Direction)
switch media.Direction {
case streamer.DirectionSendonly:

View File

@@ -75,7 +75,7 @@ func (c *Client) GetTrack(media *streamer.Media, codec *streamer.Codec) *streame
}
}
track := &streamer.Track{Codec: codec, Direction: media.Direction}
track := streamer.NewTrack(codec, media.Direction)
c.tracks = append(c.tracks, track)
return track
}

View File

@@ -192,10 +192,7 @@ func (c *Client) getTracks() error {
}
c.medias = append(c.medias, media)
track := &streamer.Track{
Direction: streamer.DirectionSendonly,
Codec: codec,
}
track := streamer.NewTrack(codec, streamer.DirectionSendonly)
c.tracks[msg.TrackID] = track
case "mp4a": // mp4a.40.2

View File

@@ -83,9 +83,7 @@ func (c *Client) Dial() (err error) {
}
c.medias = append(c.medias, media)
track := &streamer.Track{
Codec: codec, Direction: media.Direction,
}
track := streamer.NewTrack(codec, media.Direction)
c.tracks = append(c.tracks, track)
case av.AAC:
@@ -108,9 +106,7 @@ func (c *Client) Dial() (err error) {
}
c.medias = append(c.medias, media)
track := &streamer.Track{
Codec: codec, Direction: media.Direction,
}
track := streamer.NewTrack(codec, media.Direction)
c.tracks = append(c.tracks, track)
default:

View File

@@ -429,9 +429,7 @@ func (c *Conn) SetupMedia(
return nil, err
}
track := &streamer.Track{
Codec: codec, Direction: media.Direction,
}
track := streamer.NewTrack(codec, media.Direction)
switch track.Direction {
case streamer.DirectionSendonly:
@@ -519,9 +517,7 @@ func (c *Conn) Accept() error {
// TODO: fix someday...
c.channels = map[byte]*streamer.Track{}
for i, media := range c.Medias {
track := &streamer.Track{
Codec: media.Codecs[0], Direction: media.Direction,
}
track := streamer.NewTrack(media.Codecs[0], media.Direction)
c.tracks = append(c.tracks, track)
c.channels[byte(i<<1)] = track
}

View File

@@ -13,7 +13,11 @@ type Track struct {
Codec *Codec
Direction string
sink map[*Track]WriterFunc
sinkMu sync.RWMutex
sinkMu *sync.RWMutex
}
func NewTrack(codec *Codec, direction string) *Track {
return &Track{Codec: codec, Direction: direction, sinkMu: new(sync.RWMutex)}
}
func (t *Track) String() string {
@@ -40,14 +44,12 @@ func (t *Track) Bind(w WriterFunc) *Track {
t.sink = map[*Track]WriterFunc{}
}
clone := &Track{
Codec: t.Codec, Direction: t.Direction, sink: t.sink,
}
t.sink[clone] = w
clone := *t
t.sink[&clone] = w
t.sinkMu.Unlock()
return clone
return &clone
}
func (t *Track) Unbind() {