diff options
| author | Russ Cox <rsc@golang.org> | 2014-09-01 19:42:22 -0400 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2014-09-01 19:42:22 -0400 |
| commit | a8c5e87b1e5ef224a10440bff6b79b605570cd3c (patch) | |
| tree | 9986560c32403dfe08eda543f15e04cf2c417cd8 /src/pkg/runtime | |
| parent | 548d0805f738c5f4d5bb7e72334b80c2acff059d (diff) | |
| download | go-a8c5e87b1e5ef224a10440bff6b79b605570cd3c.tar.xz | |
runtime: fix Stack
Fixes #8626.
LGTM=bradfitz
R=golang-codereviews
CC=bradfitz, golang-codereviews, iant, r
https://golang.org/cl/137050043
Diffstat (limited to 'src/pkg/runtime')
| -rw-r--r-- | src/pkg/runtime/mprof.go | 4 | ||||
| -rw-r--r-- | src/pkg/runtime/stack_test.go | 10 |
2 files changed, 12 insertions, 2 deletions
diff --git a/src/pkg/runtime/mprof.go b/src/pkg/runtime/mprof.go index 8546a341bd..1734fd8470 100644 --- a/src/pkg/runtime/mprof.go +++ b/src/pkg/runtime/mprof.go @@ -584,13 +584,13 @@ func Stack(buf []byte, all bool) int { n := 0 if len(buf) > 0 { - gp.writebuf = buf + gp.writebuf = buf[0:0:len(buf)] goroutineheader(gp) traceback(pc, sp, 0, gp) if all { tracebackothers(gp) } - n = len(buf) - len(gp.writebuf) + n = len(gp.writebuf) gp.writebuf = nil } diff --git a/src/pkg/runtime/stack_test.go b/src/pkg/runtime/stack_test.go index 2877074f76..b3dcbd12a0 100644 --- a/src/pkg/runtime/stack_test.go +++ b/src/pkg/runtime/stack_test.go @@ -6,6 +6,7 @@ package runtime_test import ( . "runtime" + "strings" "sync" "testing" "time" @@ -331,3 +332,12 @@ func TestStackCache(t *testing.T) { } } } + +func TestStackOutput(t *testing.T) { + b := make([]byte, 1024) + stk := string(b[:Stack(b, false)]) + if !strings.HasPrefix(stk, "goroutine ") { + t.Errorf("Stack (len %d):\n%s", len(stk), stk) + t.Errorf("Stack output should begin with \"goroutine \"") + } +} |
