From 877f62505feb7351c02d9aa5d5cfd673493b4034 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Wed, 2 Nov 2016 19:24:48 +0700 Subject: [PATCH] fix race condition in updConn fixes #345 --- udp_conn.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/udp_conn.go b/udp_conn.go index 2c1bafe4..efc646d0 100644 --- a/udp_conn.go +++ b/udp_conn.go @@ -1,6 +1,9 @@ package quic -import "net" +import ( + "net" + "sync" +) type connection interface { write([]byte) error @@ -9,6 +12,8 @@ type connection interface { } type udpConn struct { + mutex sync.RWMutex + conn *net.UDPConn currentAddr *net.UDPAddr } @@ -21,9 +26,14 @@ func (c *udpConn) write(p []byte) error { } func (c *udpConn) setCurrentRemoteAddr(addr interface{}) { + c.mutex.Lock() c.currentAddr = addr.(*net.UDPAddr) + c.mutex.Unlock() } func (c *udpConn) RemoteAddr() *net.UDPAddr { - return c.currentAddr + c.mutex.RLock() + addr := c.currentAddr + c.mutex.RUnlock() + return addr }