Skip to content

Commit

Permalink
runtime: don't issue cgocheck error for timer bucket source pointer
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
ianlancetaylor committed Jan 15, 2018
1 parent 3968705 commit 4b3a3bd
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 0 deletions.
8 changes: 8 additions & 0 deletions misc/cgo/errors/ptr_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()`,
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) {
Expand Down
1 change: 1 addition & 0 deletions src/runtime/time.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ func (t *timer) assignBucket() *timersBucket {
return t.tb
}

//go:notinheap
type timersBucket struct {
lock mutex
gp *g
Expand Down

0 comments on commit 4b3a3bd

Please sign in to comment.