/usr/share/go-1.8/test/fixedbugs/issue11256.go is in golang-1.8-src 1.8.3-2ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | // run
// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Test that stack barriers are reset when a goroutine exits without
// returning.
package main
import (
"runtime"
"sync/atomic"
"time"
)
func main() {
// Let the garbage collector run concurrently.
runtime.GOMAXPROCS(2)
var x [100][]byte
for i := range x {
var done int32
go func() {
// Use enough stack to get stack barriers, but
// not so much that we go over _FixedStack.
// There's a very narrow window here on most
// OSs, so we basically can't do anything (not
// even a time.Sleep or a channel).
var buf [1024]byte
buf[0]++
for atomic.LoadInt32(&done) == 0 {
runtime.Gosched()
}
atomic.StoreInt32(&done, 0)
// Exit without unwinding stack barriers.
runtime.Goexit()
}()
// Generate some garbage.
x[i] = make([]byte, 1024*1024)
// Give GC some time to install stack barriers in the G.
time.Sleep(50 * time.Microsecond)
atomic.StoreInt32(&done, 1)
for atomic.LoadInt32(&done) == 1 {
runtime.Gosched()
}
}
}
|