failed to close writer: context canceled
- 主要语言
- Go
- 星标
- 5.5k
- 派生
- 372
- PR 合并指标
- 30 天内没有已合并 PR
描述
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!
贡献指南
这个仓库没有索引到贡献指南
评估
这个 Issue 还没有评估数据。