summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--modules/log/groutinelabel.go2
-rw-r--r--modules/log/groutinelabel_go1.24.go38
2 files changed, 40 insertions, 0 deletions
diff --git a/modules/log/groutinelabel.go b/modules/log/groutinelabel.go
index 56d7af42da..cd5fb96d52 100644
--- a/modules/log/groutinelabel.go
+++ b/modules/log/groutinelabel.go
@@ -1,3 +1,5 @@
+//go:build !go1.24
+
// Copyright 2022 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
diff --git a/modules/log/groutinelabel_go1.24.go b/modules/log/groutinelabel_go1.24.go
new file mode 100644
index 0000000000..e849811bc2
--- /dev/null
+++ b/modules/log/groutinelabel_go1.24.go
@@ -0,0 +1,38 @@
+//go:build go1.24
+
+// Copyright 2024 The Forgejo Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package log
+
+import "unsafe"
+
+//go:linkname runtime_getProfLabel runtime/pprof.runtime_getProfLabel
+func runtime_getProfLabel() unsafe.Pointer //nolint
+
+// Struct definitions copied from: https://github.com/golang/go/blob/ca63101df47a4467bc80faa654fc19d68e583952/src/runtime/pprof/label.go
+type label struct {
+ key string
+ value string
+}
+
+type LabelSet struct {
+ list []label
+}
+
+type labelMap struct {
+ LabelSet
+}
+
+func getGoroutineLabels() map[string]string {
+ l := (*labelMap)(runtime_getProfLabel())
+ if l == nil {
+ return nil
+ }
+
+ m := make(map[string]string, len(l.list))
+ for _, label := range l.list {
+ m[label.key] = label.value
+ }
+ return m
+}