go-sip-ua
go-sip-ua copied to clipboard
read和close可能发生条件竞争
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,那么后面代码将会继续执行。
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