fix server panic trying to send on stream as client disconnects #1111 (#1115)
diff --git a/transport/handler_server.go b/transport/handler_server.go
index 24f306b..31b0570 100644
--- a/transport/handler_server.go
+++ b/transport/handler_server.go
@@ -179,11 +179,18 @@
// do runs fn in the ServeHTTP goroutine.
func (ht *serverHandlerTransport) do(fn func()) error {
+ // Avoid a panic writing to closed channel. Imperfect but maybe good enough.
select {
- case ht.writes <- fn:
- return nil
case <-ht.closedCh:
return ErrConnClosing
+ default:
+ select {
+ case ht.writes <- fn:
+ return nil
+ case <-ht.closedCh:
+ return ErrConnClosing
+ }
+
}
}