mirror of
https://github.com/tailscale/tailscale.git
synced 2025-08-12 05:37:32 +00:00
util/goroutines: let ScrubbedGoroutineDump get only current stack
ScrubbedGoroutineDump previously only returned the stacks of all goroutines. I also want to be able to use this for only the current goroutine's stack. Add a bool param to support both ways. Updates tailscale/corp#5149 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:

committed by
Brad Fitzpatrick

parent
fbacc0bd39
commit
7c1068b7ac
@@ -11,15 +11,16 @@ import (
|
||||
"strconv"
|
||||
)
|
||||
|
||||
// ScrubbedGoroutineDump returns the list of all current goroutines, but with the actual
|
||||
// values of arguments scrubbed out, lest it contain some private key material.
|
||||
func ScrubbedGoroutineDump() []byte {
|
||||
// ScrubbedGoroutineDump returns either the current goroutine's stack or all
|
||||
// goroutines' stacks, but with the actual values of arguments scrubbed out,
|
||||
// lest it contain some private key material.
|
||||
func ScrubbedGoroutineDump(all bool) []byte {
|
||||
var buf []byte
|
||||
// Grab stacks multiple times into increasingly larger buffer sizes
|
||||
// to minimize the risk that we blow past our iOS memory limit.
|
||||
for size := 1 << 10; size <= 1<<20; size += 1 << 10 {
|
||||
buf = make([]byte, size)
|
||||
buf = buf[:runtime.Stack(buf, true)]
|
||||
buf = buf[:runtime.Stack(buf, all)]
|
||||
if len(buf) < size {
|
||||
// It fit.
|
||||
break
|
||||
|
@@ -6,7 +6,7 @@ package goroutines
|
||||
import "testing"
|
||||
|
||||
func TestScrubbedGoroutineDump(t *testing.T) {
|
||||
t.Logf("Got:\n%s\n", ScrubbedGoroutineDump())
|
||||
t.Logf("Got:\n%s\n", ScrubbedGoroutineDump(true))
|
||||
}
|
||||
|
||||
func TestScrubHex(t *testing.T) {
|
||||
|
Reference in New Issue
Block a user