failed to close writer: context canceled
- Lingua principale
- Go
- Stelle
- 5.5k
- Fork
- 372
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
I'm using this library to create a zero-trust tunnel into a Kubernetes cluster, when I encountered this error message:
> failed to write msg: failed to close writer: failed to acquire lock: context canceled
So what happened was that when client closed the connection, I would send a "connection closed" message over the WebSocket connection, but I (mistakenly) used the request context for the write command.
This context would get cancelled somewhere around this Write call, sometimes after message was written but before it released the lock.
As a result, the lock would never get released and the websocket was no longer usable.
The solution was to create a new context for the write:
```go
writeCtx, _ := context.WithTimeout(context.Background(), 2*time.Second)
err = c.Websocket.Write(writeCtx, websocket.MessageText, marshal)
```
And I don't think I should have used the request context to begin with, but I do think it's not optimal behaviour that the websocket can be left in a broken state by mistimed context cancel.
In any case, just thought I'd share it. Thanks for maintaining this awesome library!
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Valutazione
Questa issue non è ancora stata valutata.