Skip to content

Instantly share code, notes, and snippets.

@Sean-Der
Created September 12, 2018 07:19
Show Gist options
  • Save Sean-Der/77a1b2ee17177aad58332314948c9314 to your computer and use it in GitHub Desktop.
Save Sean-Der/77a1b2ee17177aad58332314948c9314 to your computer and use it in GitHub Desktop.
diff --git a/internal/network/manager.go b/internal/network/manager.go
index f012216..c4a8cff 100644
--- a/internal/network/manager.go
+++ b/internal/network/manager.go
@@ -85,6 +85,9 @@ func NewManager(btg BufferTransportGenerator, dcet DataChannelEventHandler, ntf
// AddURL takes an ICE Url, allocates any state and adds the candidate
func (m *Manager) AddURL(url *ice.URL) error {
+ m.portsLock.Lock()
+ defer m.portsLock.Unlock()
+
switch url.Scheme {
case ice.SchemeTypeSTUN:
c, err := webrtcStun.Allocate(url)
@@ -144,8 +147,8 @@ func (m *Manager) DTLSFingerprint() string {
// SendRTP finds a connected port and sends the passed RTP packet
func (m *Manager) SendRTP(packet *rtp.Packet) {
- m.portsLock.Lock()
- defer m.portsLock.Unlock()
+ m.portsLock.RLock()
+ defer m.portsLock.RUnlock()
local, remote := m.IceAgent.SelectedPair()
if local == nil || remote == nil {
@@ -252,8 +255,8 @@ func (m *Manager) dataChannelOutboundHandler(raw []byte) {
return
}
- m.portsLock.Lock()
- defer m.portsLock.Unlock()
+ m.portsLock.RLock()
+ defer m.portsLock.RUnlock()
p, err := m.port(local)
if err != nil {
fmt.Println("dataChannelOutboundHandler: no valid port for candidate, dropping packet")
@@ -273,8 +276,8 @@ func (m *Manager) port(local *stun.TransportAddr) (*port, error) {
}
func (m *Manager) iceOutboundHandler(raw []byte, local *stun.TransportAddr, remote *net.UDPAddr) {
- m.portsLock.Lock()
- defer m.portsLock.Unlock()
+ m.portsLock.RLock()
+ defer m.portsLock.RUnlock()
for _, p := range m.ports {
if p.listeningAddr.Equal(local) {
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment