File: gid.go

package info (click to toggle)
golang-github-jtolds-gls 4.2.1-4
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 92 kB
  • sloc: makefile: 2
file content (25 lines) | stat: -rw-r--r-- 699 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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) })
}