go-sip-ua icon indicating copy to clipboard operation
go-sip-ua copied to clipboard

read和close可能发生条件竞争

Open Windforce17 opened this issue 3 years ago • 1 comments

https://github.com/cloudwebrtc/go-sip-ua/blob/cb97c3651b0e91ce6a3e7b41811b8b0d63f88f84/pkg/media/rtp/udp.go#L65

	if r.stop {
			r.Log().Infof("Terminate: stop rtp conn now!")
			return
		}
		n, raddr, err := r.conn.ReadFrom(buf)
		if err != nil {
			r.Log().Warnf("RTP Conn [%v] refused, err: %v, stop now!", raddr, err)
			return
		}

如果先执行了if判断后,udp被close,那么后面代码将会继续执行。

Windforce17 avatar Mar 20 '21 07:03 Windforce17

Write at 0x00c000224048 by goroutine 14:
  github.com/cloudwebrtc/go-sip-ua/pkg/media/rtp.(*RtpUDPStream).Close()
      C:/Users/na/go/pkg/mod/github.com/cloudwebrtc/[email protected]/pkg/media/rtp/udp.go:55 +0x18d
  sip-gateway/pkg/SingerCall.(*CallOne).ShutDown()
      C:/Users/na/Desktop/a/go-sip-call-sdk/pkg/SingerCall/singleCall.go:212 +0x161
  sip-gateway/pkg/SingerCall.(*CallOne).initTicker.func1()
      C:/Users/na/Desktop/a/go-sip-call-sdk/pkg/SingerCall/singleCall.go:162 +0x19a

Previous read at 0x00c000224048 by goroutine 17:
  github.com/cloudwebrtc/go-sip-ua/pkg/media/rtp.(*RtpUDPStream).Read()
      C:/Users/na/go/pkg/mod/github.com/cloudwebrtc/[email protected]/pkg/media/rtp/udp.go:83 +0x317

Windforce17 avatar Mar 20 '21 07:03 Windforce17