From 160a4e660647a753620324ea843dec2e158ea12c Mon Sep 17 00:00:00 2001 From: diamondburned Date: Wed, 28 Oct 2020 19:00:59 -0700 Subject: [PATCH] wsutil: Fixed data races involving getters --- utils/wsutil/conn.go | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/utils/wsutil/conn.go b/utils/wsutil/conn.go index e1c77ca..523015e 100644 --- a/utils/wsutil/conn.go +++ b/utils/wsutil/conn.go @@ -85,24 +85,26 @@ func (c *Conn) Dial(ctx context.Context, addr string) error { // BUG which prevents stream compression. // See https://github.com/golang/go/issues/31514. - conn, _, err := c.dialer.DialContext(ctx, addr, headers) - if err != nil { - return errors.Wrap(err, "failed to dial WS") - } - - events := make(chan Event, WSBuffer) - go startReadLoop(conn, events) + var err error c.mutex.Lock() defer c.mutex.Unlock() - c.Conn = conn - c.events = events + c.Conn, _, err = c.dialer.DialContext(ctx, addr, headers) + if err != nil { + return errors.Wrap(err, "failed to dial WS") + } + + c.events = make(chan Event, WSBuffer) + go startReadLoop(c.Conn, c.events) return err } func (c *Conn) Listen() <-chan Event { + c.mutex.Lock() + defer c.mutex.Unlock() + return c.events }