summaryrefslogtreecommitdiff
path: root/vendor/github.com/bytedance/sonic/loader
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/bytedance/sonic/loader')
-rw-r--r--vendor/github.com/bytedance/sonic/loader/funcdata_go121.go4
-rw-r--r--vendor/github.com/bytedance/sonic/loader/funcdata_latest.go4
-rw-r--r--vendor/github.com/bytedance/sonic/loader/loader_latest.go3
-rw-r--r--vendor/github.com/bytedance/sonic/loader/mmap_unix.go4
-rw-r--r--vendor/github.com/bytedance/sonic/loader/stubs.go34
5 files changed, 34 insertions, 15 deletions
diff --git a/vendor/github.com/bytedance/sonic/loader/funcdata_go121.go b/vendor/github.com/bytedance/sonic/loader/funcdata_go121.go
index f50663e2a..ebeaca5a7 100644
--- a/vendor/github.com/bytedance/sonic/loader/funcdata_go121.go
+++ b/vendor/github.com/bytedance/sonic/loader/funcdata_go121.go
@@ -1,5 +1,5 @@
-//go:build go1.21 && !go1.22
-// +build go1.21,!go1.22
+//go:build go1.21 && !go1.23
+// +build go1.21,!go1.23
/*
* Copyright 2021 ByteDance Inc.
diff --git a/vendor/github.com/bytedance/sonic/loader/funcdata_latest.go b/vendor/github.com/bytedance/sonic/loader/funcdata_latest.go
index 52c6097fb..08618dca4 100644
--- a/vendor/github.com/bytedance/sonic/loader/funcdata_latest.go
+++ b/vendor/github.com/bytedance/sonic/loader/funcdata_latest.go
@@ -1,5 +1,5 @@
-// go:build go1.18 && !go1.22
-// +build go1.18,!go1.22
+// go:build go1.18 && !go1.23
+// +build go1.18,!go1.23
/*
* Copyright 2021 ByteDance Inc.
diff --git a/vendor/github.com/bytedance/sonic/loader/loader_latest.go b/vendor/github.com/bytedance/sonic/loader/loader_latest.go
index b6e3e75f8..3664c04ba 100644
--- a/vendor/github.com/bytedance/sonic/loader/loader_latest.go
+++ b/vendor/github.com/bytedance/sonic/loader/loader_latest.go
@@ -1,5 +1,4 @@
-//go:build go1.16 && !go1.22
-// +build go1.16,!go1.22
+// +build go1.16,!go1.23
/*
* Copyright 2021 ByteDance Inc.
diff --git a/vendor/github.com/bytedance/sonic/loader/mmap_unix.go b/vendor/github.com/bytedance/sonic/loader/mmap_unix.go
index 3ea944ed6..26bdb6584 100644
--- a/vendor/github.com/bytedance/sonic/loader/mmap_unix.go
+++ b/vendor/github.com/bytedance/sonic/loader/mmap_unix.go
@@ -1,5 +1,5 @@
-//go:build darwin || linux
-// +build darwin linux
+//go:build !windows
+// +build !windows
/**
* Copyright 2023 ByteDance Inc.
diff --git a/vendor/github.com/bytedance/sonic/loader/stubs.go b/vendor/github.com/bytedance/sonic/loader/stubs.go
index 8377649b7..80f8de836 100644
--- a/vendor/github.com/bytedance/sonic/loader/stubs.go
+++ b/vendor/github.com/bytedance/sonic/loader/stubs.go
@@ -17,7 +17,8 @@
package loader
import (
- `sync`
+ "sync/atomic"
+ "unsafe"
_ `unsafe`
)
@@ -25,16 +26,35 @@ import (
//goland:noinspection GoUnusedGlobalVariable
var lastmoduledatap *moduledata
-var moduledataMux sync.Mutex
-
func registerModule(mod *moduledata) {
- moduledataMux.Lock()
- lastmoduledatap.next = mod
- lastmoduledatap = mod
- moduledataMux.Unlock()
+ registerModuleLockFree(&lastmoduledatap, mod)
}
//go:linkname moduledataverify1 runtime.moduledataverify1
func moduledataverify1(_ *moduledata)
+func registerModuleLockFree(tail **moduledata, mod *moduledata) {
+ for {
+ oldTail := loadModule(tail)
+ if casModule(tail, oldTail, mod) {
+ storeModule(&oldTail.next, mod)
+ break
+ }
+ }
+}
+
+func loadModule(p **moduledata) *moduledata {
+ return (*moduledata)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
+}
+func storeModule(p **moduledata, value *moduledata) {
+ atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(value))
+}
+
+func casModule(p **moduledata, oldValue *moduledata, newValue *moduledata) bool {
+ return atomic.CompareAndSwapPointer(
+ (*unsafe.Pointer)(unsafe.Pointer(p)),
+ unsafe.Pointer(oldValue),
+ unsafe.Pointer(newValue),
+ )
+}