THRIFT-5896: Fix race condition in TServerSocket.Addr()
Client: go
diff --git a/lib/go/thrift/server_socket.go b/lib/go/thrift/server_socket.go
index 7dd24ae..6012771 100644
--- a/lib/go/thrift/server_socket.go
+++ b/lib/go/thrift/server_socket.go
@@ -26,12 +26,12 @@
)
type TServerSocket struct {
- listener net.Listener
addr net.Addr
clientTimeout time.Duration
- // Protects the interrupted value to make it thread safe.
+ // Protects the listener and interrupted fields to make them thread safe.
mu sync.RWMutex
+ listener net.Listener
interrupted bool
}
@@ -110,7 +110,9 @@
}
func (p *TServerSocket) Addr() net.Addr {
- if p.listener != nil {
+ p.mu.RLock()
+ defer p.mu.RUnlock()
+ if p.IsListening() {
return p.listener.Addr()
}
return p.addr