提交 5367ee76 作者: Robert Carlsen

fix another panic where CloseNotify was called from wrong goroutine

    panic: net/http: CloseNotify called after ServeHTTP finished

    goroutine 180 [running]:
    net/http.(*response).CloseNotify(0xc8220684e0, 0x0)
        /home/r/go/src/net/http/server.go:1535 +0x9d
    github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/prometheus/client_golang/
        /home/r/src/github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/prome
    github.com/ipfs/go-ipfs/core/corehttp.(*gatewayHandler).getOrHeadHandler.func1(0x7
        /home/r/src/github.com/ipfs/go-ipfs/core/corehttp/gateway_handler.go:119 +
    created by github.com/ipfs/go-ipfs/core/corehttp.(*gatewayHandler).getOrHeadHandle
        /home/r/src/github.com/ipfs/go-ipfs/core/corehttp/gateway_handler.go:123 +

License: MIT
Signed-off-by: 's avatarRobert Carlsen <rwcarlsen@gmail.com>
上级 37258a26
......@@ -114,9 +114,10 @@ func (i *gatewayHandler) getOrHeadHandler(w http.ResponseWriter, r *http.Request
defer cancel()
if cn, ok := w.(http.CloseNotifier); ok {
clientGone := cn.CloseNotify()
go func() {
select {
case <-cn.CloseNotify():
case <-clientGone:
case <-ctx.Done():
}
cancel()
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论