summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorGusted <postmaster@gusted.xyz>2024-12-17 15:26:28 +0100
committerGusted <postmaster@gusted.xyz>2024-12-17 16:12:22 +0100
commit61e21d7ded198653a91a49f945d2c2a6dee0e73c (patch)
tree074686e228e6936ae429e1e32049b74d8d15c9dd /modules
parentUpdate dependency @vitest/eslint-plugin to v1.1.16 (forgejo) (#6290) (diff)
downloadforgejo-61e21d7ded198653a91a49f945d2c2a6dee0e73c.tar.xz
forgejo-61e21d7ded198653a91a49f945d2c2a6dee0e73c.zip
chore: Make Forgejo build with go1.24
- [Go 1.24](https://groups.google.com/g/golang-announce/c/vYMfuq_XO6w) is currently out for rc1. - Using it to test unit tests and integration testing it failed horribly with strange panics and errors, it is caused by https://github.com/golang/go/commit/ca63101df47a4467bc80faa654fc19d68e583952 and Forgejo trying to access the wrong internal data structures that have been changed in Go 1.24. - Use the new data structure for Go 1.24 and above.
Diffstat (limited to 'modules')
-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
+}