mirror of https://github.com/golang/go.git
runtime: don't issue cgocheck error for timer bucket source pointer
The cgo checker was issuing an error with cgocheck=2 when a timer bucket was stored in a pollDesc. The pollDesc values are allocated using persistentalloc, so they are not in the Go heap. The code is OK since timer bucket pointers point into a global array, and as such are never garbage collected or moved. Mark timersBucket notinheap to avoid the problem. timersBucket values only occur in the global timers array. Fixes #23435 Change-Id: I835f31caafd54cdacc692db5989de63bb49e7697 Reviewed-on: https://go-review.googlesource.com/87637 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
39687051e9
commit
4b3a3bd3aa
|
|
@ -349,6 +349,14 @@ var ptrTests = []ptrTest{
|
||||||
body: `var wg sync.WaitGroup; wg.Add(100); for i := 0; i < 100; i++ { go func(i int) { for j := 0; j < 100; j++ { C.f(); runtime.GOMAXPROCS(i) }; wg.Done() }(i) }; wg.Wait()`,
|
body: `var wg sync.WaitGroup; wg.Add(100); for i := 0; i < 100; i++ { go func(i int) { for j := 0; j < 100; j++ { C.f(); runtime.GOMAXPROCS(i) }; wg.Done() }(i) }; wg.Wait()`,
|
||||||
fail: false,
|
fail: false,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
// Test poller deadline with cgocheck=2. Issue #23435.
|
||||||
|
name: "deadline",
|
||||||
|
c: `#define US 10`,
|
||||||
|
imports: []string{"os", "time"},
|
||||||
|
body: `r, _, _ := os.Pipe(); r.SetDeadline(time.Now().Add(C.US * time.Microsecond))`,
|
||||||
|
fail: false,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPointerChecks(t *testing.T) {
|
func TestPointerChecks(t *testing.T) {
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,7 @@ func (t *timer) assignBucket() *timersBucket {
|
||||||
return t.tb
|
return t.tb
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:notinheap
|
||||||
type timersBucket struct {
|
type timersBucket struct {
|
||||||
lock mutex
|
lock mutex
|
||||||
gp *g
|
gp *g
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue