From 27bf9746b5eb8ea09f099b219bcafc92ee8e7e2d Mon Sep 17 00:00:00 2001 From: cyBerta <cyberta@riseup.net> Date: Sat, 29 Mar 2025 20:56:36 +0100 Subject: [PATCH] use mutex when accessing obfs4Conns in order to avoid race conditions --- client/client.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/client/client.go b/client/client.go index 70bce4b..9758cbd 100644 --- a/client/client.go +++ b/client/client.go @@ -419,21 +419,25 @@ func (c *Client) readUDPWriteTCP() { c.error("readUDPWriteTCP: Write err from %v to %v: %v", conn.LocalAddr(), conn.RemoteAddr(), err) cancelled := cancellableSleep(c.ctx, reconnectTime) if !cancelled { - config := c.obfs4Conns[0].config + conn, err = c.getUsableConnection() + if err != nil { + return + } + config := conn.config c.connectObfs4(&config, 20) } } } } -func (c *Client) getUsableConnection() (net.Conn, error) { +func (c *Client) getUsableConnection() (*Obfs4Conn, error) { c.outLock.Lock() defer c.outLock.Unlock() if len(c.obfs4Conns) == 0 { return nil, errors.New("no usable connection") } else { - return c.obfs4Conns[0], nil + return &c.obfs4Conns[0], nil } } -- GitLab