coder / coder/websocket

failed to close writer: context canceled

Aperta
#474 12 commenti 0 reazioni 1 assegnatario Rivendicata da @mafredri Vedi su GitHub
bug
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.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.