mirror of
https://gitlab.com/ric_harvey/MailHog.git
synced 2024-11-30 17:54:03 +00:00
26 lines
699 B
Go
26 lines
699 B
Go
|
package gls
|
||
|
|
||
|
var (
|
||
|
stackTagPool = &idPool{}
|
||
|
)
|
||
|
|
||
|
// Will return this goroutine's identifier if set. If you always need a
|
||
|
// goroutine identifier, you should use EnsureGoroutineId which will make one
|
||
|
// if there isn't one already.
|
||
|
func GetGoroutineId() (gid uint, ok bool) {
|
||
|
return readStackTag()
|
||
|
}
|
||
|
|
||
|
// Will call cb with the current goroutine identifier. If one hasn't already
|
||
|
// been generated, one will be created and set first. The goroutine identifier
|
||
|
// might be invalid after cb returns.
|
||
|
func EnsureGoroutineId(cb func(gid uint)) {
|
||
|
if gid, ok := readStackTag(); ok {
|
||
|
cb(gid)
|
||
|
return
|
||
|
}
|
||
|
gid := stackTagPool.Acquire()
|
||
|
defer stackTagPool.Release(gid)
|
||
|
addStackTag(gid, func() { cb(gid) })
|
||
|
}
|