Skip to content

Commit a7f7066

Browse files
committed
derp/derphttp: wait for websocket connections to exit on close
This was causing a leak in our CI!
1 parent 059dea1 commit a7f7066

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

derp/derphttp/derphttp_client.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ type Client struct {
5656

5757
forcedWebsocket atomic.Bool // optional; set if the server has failed to upgrade the connection on the DERP server
5858
forcedWebsocketCallback atomic.Pointer[func(int, string)]
59+
websocketsClosed sync.WaitGroup
5960

6061
privateKey key.NodePrivate
6162
logf logger.Logf
@@ -331,6 +332,12 @@ func (c *Client) connect(ctx context.Context, caller string) (client *derp.Clien
331332
c.logf("%s: websocket to %v error: %v", caller, urlStr, err)
332333
return nil, 0, err
333334
}
335+
c.websocketsClosed.Add(1)
336+
defer func() {
337+
conn.Close()
338+
c.websocketsClosed.Done()
339+
}()
340+
334341
brw := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn))
335342
derpClient, err := derp.NewClient(c.privateKey, conn, brw, c.logf,
336343
derp.MeshKey(c.MeshKey),
@@ -1051,6 +1058,7 @@ func (c *Client) Close() error {
10511058
if c.netConn != nil {
10521059
c.netConn.Close()
10531060
}
1061+
c.websocketsClosed.Wait()
10541062
return nil
10551063
}
10561064

0 commit comments

Comments
 (0)