@cryptotaxi247 / kubo / commits / ed23d99d6

fix panic where closenotify was called from wrong goroutine

Previously, this was the result when running a test with go1.6rc2: go test github.com/ipfs/go-ipfs/commands/http panic: net/http: CloseNotify called after ServeHTTP finished goroutine 19 [running]: net/http.(*response).CloseNotify(0xc8202ca1a0, 0x0) /home/r/go/src/net/http/server.go:1533 +0x9d github.com/ipfs/go-ipfs/commands/http.internalHandler.ServeHTTP.func2(0x7f42c9d1d180, 0xc8202ca1a0, 0x7f42c9d66e90, 0xc8200f0380, 0xc8201d40d0) /home/r/src/github.com/ipfs/go-ipfs/commands/http/handler.go:143 +0x39 created by github.com/ipfs/go-ipfs/commands/http.internalHandler.ServeHTTP /home/r/src/github.com/ipfs/go-ipfs/commands/http/handler.go:147 +0x49d FAIL github.com/ipfs/go-ipfs/commands/http 0.013s I had also encountered this panic when trying to use the webui. License: MIT Signed-off-by: Robert Carlsen <rwcarlsen@gmail.com>

Robert Carlsen committed Feb 8, 2016 at 15:35 UTC ed23d99d6f1f7804c84c07426d5a110c2d448046
1 file changed +2 -1
commands/http/handler.go
+2 -1
@@ -138,9 +138,10 @@ func (i internalHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
138 ctx, cancel := context.WithCancel(node.Context())
139 defer cancel()
140 if cn, ok := w.(http.CloseNotifier); ok {
141 + clientGone := cn.CloseNotify()
142 go func() {
143 select {
143 - case <-cn.CloseNotify():
144 + case <-clientGone:
145 case <-ctx.Done():
146 }
147 cancel()