From dd43bf807d2d571a7278e9d0755d6787800a0006 Mon Sep 17 00:00:00 2001 From: Dave Cheney Date: Thu, 22 Nov 2012 08:18:45 +1100 Subject: [PATCH] net/http: use runtime.Stack instead of runtime/debug.Stack MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Fixes #4060. 2012/11/21 19:51:34 http: panic serving 127.0.0.1:47139: Kaaarn! goroutine 7 [running]: net/http.func·004(0x7f330807ffb0, 0x7f330807f100) /home/dfc/go/src/pkg/net/http/server.go:615 +0xa7 ----- stack segment boundary ----- main.(*httpHandler).ServeHTTP() /home/dfc/src/httppanic.go:16 +0x53 net/http.(*conn).serve(0xc200090240, 0x0) /home/dfc/go/src/pkg/net/http/server.go:695 +0x55d created by net/http.(*Server).Serve /home/dfc/go/src/pkg/net/http/server.go:1119 +0x36d R=golang-dev, dsymonds CC=golang-dev https://golang.org/cl/6846085 --- src/pkg/net/http/server.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/pkg/net/http/server.go b/src/pkg/net/http/server.go index 805e0737a9..3a4d61c213 100644 --- a/src/pkg/net/http/server.go +++ b/src/pkg/net/http/server.go @@ -11,7 +11,6 @@ package http import ( "bufio" - "bytes" "crypto/tls" "errors" "fmt" @@ -21,7 +20,7 @@ import ( "net" "net/url" "path" - "runtime/debug" + "runtime" "strconv" "strings" "sync" @@ -610,10 +609,10 @@ func (c *conn) serve() { return } - var buf bytes.Buffer - fmt.Fprintf(&buf, "http: panic serving %v: %v\n", c.remoteAddr, err) - buf.Write(debug.Stack()) - log.Print(buf.String()) + const size = 4096 + buf := make([]byte, size) + buf = buf[:runtime.Stack(buf, false)] + log.Printf("http: panic serving %v: %v\n%s", c.remoteAddr, err, buf) if c.rwc != nil { // may be nil if connection hijacked c.rwc.Close() -- 2.48.1