Browse Source

use RWMutex instead of Mutex

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

10
main.go

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

4
rtsp_client.go

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

Loading…
Cancel
Save