Open daninmadison opened 1 year ago
I realized the code I pushed earlier this week had a bug. It needs to use the sync once signalUp for the wg.Done.
Pushed a new fix. Just in case that didn't come through correctly, here is the corrected code...
for {
// Exit if our context has been closed
if ctx.Err() != nil {
if wg != nil {
signalUp.Do(wg.Done)
}
return
}
In the listen function, the for loop checks for a ctx closed. If it is, it exits the function. It needs to call the wg.Done.
If the Connect function is given a wrong details, the initial listen will never succeed the websocket.DialConfig. As a result, the only way to stop this function is to cancel the context. The problem is, the context closed does not call wg.Done prior to the return.
As a result, the Connect will be stuck at the wg.Wait and never return.
Here is code to correct the problem.
func (c Client) listen(ctx context.Context, wg sync.WaitGroup) { var signalUp sync.Once