]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: convert extram and extraMWaiters to internal atomic type
authorAndy Pan <panjf2000@gmail.com>
Thu, 25 Aug 2022 13:08:02 +0000 (21:08 +0800)
committerGopher Robot <gobot@golang.org>
Wed, 31 Aug 2022 15:01:49 +0000 (15:01 +0000)
Updates #53821

Change-Id: Id579b2f8e48dfbe9f37e02d2fa8c94354f9887a4
Reviewed-on: https://go-review.googlesource.com/c/go/+/425480
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
Run-TryBot: hopehook <hopehook@golangcn.org>
Auto-Submit: Michael Pratt <mpratt@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/runtime/cgocall.go
src/runtime/proc.go

index dd9de9d247aff701bb4d6f7c5615da698305994e..0a25cb65629023eb76d3d7076d8b394cd2c81320 100644 (file)
@@ -86,7 +86,6 @@ package runtime
 
 import (
        "internal/goarch"
-       "runtime/internal/atomic"
        "runtime/internal/sys"
        "unsafe"
 )
@@ -259,7 +258,7 @@ func cgocallbackg1(fn, frame unsafe.Pointer, ctxt uintptr) {
        // We must still stay on the same m.
        defer unlockOSThread()
 
-       if gp.m.needextram || atomic.Load(&extraMWaiters) > 0 {
+       if gp.m.needextram || extraMWaiters.Load() > 0 {
                gp.m.needextram = false
                systemstack(newextram)
        }
index b72e8b4d19eb4e5ac3032bae644792e78b97b788..b5e04e93ae9bb6641e6a573cc80a2c7938624966 100644 (file)
@@ -1878,7 +1878,7 @@ var earlycgocallback = []byte("fatal error: cgo callback before cgo call\n")
 // It is called with a working local m, so that it can do things
 // like call schedlock and allocate.
 func newextram() {
-       c := atomic.Xchg(&extraMWaiters, 0)
+       c := extraMWaiters.Swap(0)
        if c > 0 {
                for i := uint32(0); i < c; i++ {
                        oneNewExtraM()
@@ -1999,9 +1999,9 @@ func getm() uintptr {
        return uintptr(unsafe.Pointer(getg().m))
 }
 
-var extram uintptr
+var extram atomic.Uintptr
 var extraMCount uint32 // Protected by lockextra
-var extraMWaiters uint32
+var extraMWaiters atomic.Uint32
 
 // lockextra locks the extra list and returns the list head.
 // The caller must unlock the list by storing a new list head
@@ -2015,7 +2015,7 @@ func lockextra(nilokay bool) *m {
 
        incr := false
        for {
-               old := atomic.Loaduintptr(&extram)
+               old := extram.Load()
                if old == locked {
                        osyield_no_g()
                        continue
@@ -2025,13 +2025,13 @@ func lockextra(nilokay bool) *m {
                                // Add 1 to the number of threads
                                // waiting for an M.
                                // This is cleared by newextram.
-                               atomic.Xadd(&extraMWaiters, 1)
+                               extraMWaiters.Add(1)
                                incr = true
                        }
                        usleep_no_g(1)
                        continue
                }
-               if atomic.Casuintptr(&extram, old, locked) {
+               if extram.CompareAndSwap(old, locked) {
                        return (*m)(unsafe.Pointer(old))
                }
                osyield_no_g()
@@ -2041,7 +2041,7 @@ func lockextra(nilokay bool) *m {
 
 //go:nosplit
 func unlockextra(mp *m) {
-       atomic.Storeuintptr(&extram, uintptr(unsafe.Pointer(mp)))
+       extram.Store(uintptr(unsafe.Pointer(mp)))
 }
 
 var (