aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/runtime.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/runtime.go')
-rw-r--r--src/runtime/runtime.go10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/runtime/runtime.go b/src/runtime/runtime.go
index 0829a84e43..92cdfc310e 100644
--- a/src/runtime/runtime.go
+++ b/src/runtime/runtime.go
@@ -172,7 +172,15 @@ func (g *godebugInc) IncNonDefault() {
// *godebug.Setting.
inc = new(func())
*inc = (*newInc)(g.name)
- g.inc.Store(inc)
+ if raceenabled {
+ racerelease(unsafe.Pointer(&g.inc))
+ }
+ if !g.inc.CompareAndSwap(nil, inc) {
+ inc = g.inc.Load()
+ }
+ }
+ if raceenabled {
+ raceacquire(unsafe.Pointer(&g.inc))
}
(*inc)()
}