This is an automated email from the ASF dual-hosted git repository.

dcelasun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/thrift.git


The following commit(s) were added to refs/heads/master by this push:
     new 2b7365c  THRIFT-4659: Fix race when closing server socket (#1645)
2b7365c is described below

commit 2b7365c54f823013cc6a4760798051b22743c103
Author: Jay Gheewala <[email protected]>
AuthorDate: Tue Dec 11 00:44:44 2018 -0800

    THRIFT-4659: Fix race when closing server socket (#1645)
    
    Client: go
---
 lib/go/thrift/server_socket.go | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/lib/go/thrift/server_socket.go b/lib/go/thrift/server_socket.go
index 80313c4..7dd24ae 100644
--- a/lib/go/thrift/server_socket.go
+++ b/lib/go/thrift/server_socket.go
@@ -75,7 +75,9 @@ func (p *TServerSocket) Accept() (TTransport, error) {
                return nil, errTransportInterrupted
        }
 
+       p.mu.Lock()
        listener := p.listener
+       p.mu.Unlock()
        if listener == nil {
                return nil, NewTTransportException(NOT_OPEN, "No underlying 
server socket")
        }
@@ -115,19 +117,20 @@ func (p *TServerSocket) Addr() net.Addr {
 }
 
 func (p *TServerSocket) Close() error {
-       defer func() {
-               p.listener = nil
-       }()
+       var err error
+       p.mu.Lock()
        if p.IsListening() {
-               return p.listener.Close()
+               err = p.listener.Close()
+               p.listener = nil
        }
-       return nil
+       p.mu.Unlock()
+       return err
 }
 
 func (p *TServerSocket) Interrupt() error {
        p.mu.Lock()
-       defer p.mu.Unlock()
        p.interrupted = true
+       p.mu.Unlock()
        p.Close()
 
        return nil

Reply via email to