]> Sergey Matveev's repositories - tofuproxy.git/blobdiff - conn.go
HTTP/2.0
[tofuproxy.git] / conn.go
diff --git a/conn.go b/conn.go
index 1542abda9935a85b1afdefb4b49b05861b78cd9b..fbb8a5c19aa13a7d858493fa9182d03e791074cf 100644 (file)
--- a/conn.go
+++ b/conn.go
@@ -25,6 +25,7 @@ import (
 type SingleConn struct {
        conn net.Conn
        ln   *SingleListener
+       once sync.Once
 }
 
 func (conn *SingleConn) Read(b []byte) (int, error) { return conn.conn.Read(b) }
@@ -32,7 +33,7 @@ func (conn *SingleConn) Read(b []byte) (int, error) { return conn.conn.Read(b) }
 func (conn *SingleConn) Write(b []byte) (int, error) { return conn.conn.Write(b) }
 
 func (conn *SingleConn) Close() error {
-       conn.ln.Unlock()
+       conn.once.Do(conn.ln.Unlock)
        return conn.conn.Close()
 }
 
@@ -62,7 +63,7 @@ func (ln *SingleListener) Accept() (net.Conn, error) {
                return nil, AlreadyAccepted{}
        }
        ln.accepted = true
-       return &SingleConn{ln.conn, ln}, nil
+       return &SingleConn{conn: ln.conn, ln: ln}, nil
 }
 
 func (ln *SingleListener) Close() error { return nil }