Browse Source

use RWMutex instead of Mutex

pull/2/head
aler9 7 years ago
parent
commit
076f5977bd
  1. 10
      main.go
  2. 4
      rtsp_client.go

10
main.go

@ -16,7 +16,7 @@ type program struct {
rtspPort int rtspPort int
rtpPort int rtpPort int
rtcpPort int rtcpPort int
mutex sync.Mutex mutex sync.RWMutex
rtspl *rtspListener rtspl *rtspListener
rtpl *udpListener rtpl *udpListener
rtcpl *udpListener rtcpl *udpListener
@ -36,8 +36,8 @@ func newProgram(rtspPort int, rtpPort int, rtcpPort int) (*program, error) {
var err error var err error
p.rtpl, err = newUdpListener(rtpPort, "RTP", func(l *udpListener, buf []byte) { p.rtpl, err = newUdpListener(rtpPort, "RTP", func(l *udpListener, buf []byte) {
p.mutex.Lock() p.mutex.RLock()
defer p.mutex.Unlock() defer p.mutex.RUnlock()
for c := range p.clients { for c := range p.clients {
if c.state == "PLAY" { if c.state == "PLAY" {
l.nconn.WriteTo(buf, &net.UDPAddr{ l.nconn.WriteTo(buf, &net.UDPAddr{
@ -52,8 +52,8 @@ func newProgram(rtspPort int, rtpPort int, rtcpPort int) (*program, error) {
} }
p.rtcpl, err = newUdpListener(rtcpPort, "RTCP", func(l *udpListener, buf []byte) { p.rtcpl, err = newUdpListener(rtcpPort, "RTCP", func(l *udpListener, buf []byte) {
p.mutex.Lock() p.mutex.RLock()
defer p.mutex.Unlock() defer p.mutex.RUnlock()
for c := range p.clients { for c := range p.clients {
if c.state == "PLAY" { if c.state == "PLAY" {
l.nconn.WriteTo(buf, &net.UDPAddr{ l.nconn.WriteTo(buf, &net.UDPAddr{

4
rtsp_client.go

@ -125,8 +125,8 @@ func (c *rtspClient) run(wg sync.WaitGroup) {
} }
sdp, err := func() ([]byte, error) { sdp, err := func() ([]byte, error) {
c.p.mutex.Lock() c.p.mutex.RLock()
defer c.p.mutex.Unlock() defer c.p.mutex.RUnlock()
if len(c.p.streamSdp) == 0 { if len(c.p.streamSdp) == 0 {
return nil, fmt.Errorf("no one is streaming") return nil, fmt.Errorf("no one is streaming")

Loading…
Cancel
Save