diff options
| author | Ian Lance Taylor <iant@golang.org> | 2016-06-02 12:01:03 -0700 |
|---|---|---|
| committer | Ian Lance Taylor <iant@golang.org> | 2016-06-02 19:24:55 +0000 |
| commit | 03abde49713b46366fa47a037040697c8fdad3bb (patch) | |
| tree | 8256b1d64c6136cc89eaaa0cd28ae63b893ec62f /src/runtime/traceback.go | |
| parent | 88e0ec2979bb39bd8811ec50a69fcb5007a24623 (diff) | |
| download | go-03abde49713b46366fa47a037040697c8fdad3bb.tar.xz | |
runtime: only permit SetCgoTraceback to be called once
Accept a duplicate call, but nothing else.
Change-Id: Iec24bf5ddc3b0f0c559ad2158339aca698601743
Reviewed-on: https://go-review.googlesource.com/23692
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/runtime/traceback.go')
| -rw-r--r-- | src/runtime/traceback.go | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/runtime/traceback.go b/src/runtime/traceback.go index 96f154e213..80a54407b3 100644 --- a/src/runtime/traceback.go +++ b/src/runtime/traceback.go @@ -962,12 +962,21 @@ func isSystemGoroutine(gp *g) bool { // traceback function will only be called with the context field set // to zero. If the context function is nil, then calls from Go to C // to Go will not show a traceback for the C portion of the call stack. +// +// SetCgoTraceback should be called only once, ideally from an init function. func SetCgoTraceback(version int, traceback, context, symbolizer unsafe.Pointer) { if version != 0 { panic("unsupported version") } + if cgoTraceback != nil && cgoTraceback != traceback || + cgoContext != nil && cgoContext != context || + cgoSymbolizer != nil && cgoSymbolizer != symbolizer { + panic("call SetCgoTraceback only once") + } + cgoTraceback = traceback + cgoContext = context cgoSymbolizer = symbolizer // The context function is called when a C function calls a Go @@ -978,6 +987,7 @@ func SetCgoTraceback(version int, traceback, context, symbolizer unsafe.Pointer) } var cgoTraceback unsafe.Pointer +var cgoContext unsafe.Pointer var cgoSymbolizer unsafe.Pointer // cgoTracebackArg is the type passed to cgoTraceback. |
