mirror of https://github.com/golang/go.git
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>
This commit is contained in:
parent
88e0ec2979
commit
03abde4971
|
|
@ -962,12 +962,21 @@ func isSystemGoroutine(gp *g) bool {
|
||||||
// traceback function will only be called with the context field set
|
// 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 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.
|
// 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) {
|
func SetCgoTraceback(version int, traceback, context, symbolizer unsafe.Pointer) {
|
||||||
if version != 0 {
|
if version != 0 {
|
||||||
panic("unsupported version")
|
panic("unsupported version")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if cgoTraceback != nil && cgoTraceback != traceback ||
|
||||||
|
cgoContext != nil && cgoContext != context ||
|
||||||
|
cgoSymbolizer != nil && cgoSymbolizer != symbolizer {
|
||||||
|
panic("call SetCgoTraceback only once")
|
||||||
|
}
|
||||||
|
|
||||||
cgoTraceback = traceback
|
cgoTraceback = traceback
|
||||||
|
cgoContext = context
|
||||||
cgoSymbolizer = symbolizer
|
cgoSymbolizer = symbolizer
|
||||||
|
|
||||||
// The context function is called when a C function calls a Go
|
// 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 cgoTraceback unsafe.Pointer
|
||||||
|
var cgoContext unsafe.Pointer
|
||||||
var cgoSymbolizer unsafe.Pointer
|
var cgoSymbolizer unsafe.Pointer
|
||||||
|
|
||||||
// cgoTracebackArg is the type passed to cgoTraceback.
|
// cgoTracebackArg is the type passed to cgoTraceback.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue