From ed23d99d6f1f7804c84c07426d5a110c2d448046 Mon Sep 17 00:00:00 2001 From: Robert Carlsen Date: Mon, 8 Feb 2016 15:35:43 -0600 Subject: [PATCH] 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 --- commands/http/handler.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/commands/http/handler.go b/commands/http/handler.go index 2aa89a9ef..9ac6d4a4a 100644 --- a/commands/http/handler.go +++ b/commands/http/handler.go @@ -138,9 +138,10 @@ func (i internalHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { ctx, cancel := context.WithCancel(node.Context()) defer cancel() if cn, ok := w.(http.CloseNotifier); ok { + clientGone := cn.CloseNotify() go func() { select { - case <-cn.CloseNotify(): + case <-clientGone: case <-ctx.Done(): } cancel()