summaryrefslogtreecommitdiff
path: root/vendor/modernc.org/memory/mmap_unix.go
diff options
context:
space:
mode:
authorLibravatar kim <grufwub@gmail.com>2025-05-22 16:27:55 +0200
committerLibravatar kim <gruf@noreply.codeberg.org>2025-05-22 16:27:55 +0200
commitb6ff55662e0281c0d6e111f9307625ef695df2fa (patch)
tree5f7761efa0b51a7a7d56f96fce3681c8e9b66fe9 /vendor/modernc.org/memory/mmap_unix.go
parent[chore/woodpecker] don't make `test` depend on `lint` (#4189) (diff)
downloadgotosocial-b6ff55662e0281c0d6e111f9307625ef695df2fa.tar.xz
[chore] update dependencies (#4188)
Update dependencies: - github.com/gin-gonic/gin v1.10.0 -> v1.10.1 - github.com/gin-contrib/sessions v1.10.3 -> v1.10.4 - github.com/jackc/pgx/v5 v5.7.4 -> v5.7.5 - github.com/minio/minio-go/v7 v7.0.91 -> v7.0.92 - github.com/pquerna/otp v1.4.0 -> v1.5.0 - github.com/tdewolff/minify/v2 v2.23.5 -> v2.23.8 - github.com/yuin/goldmark v1.7.11 -> v1.7.12 - go.opentelemetry.io/otel{,/*} v1.35.0 -> v1.36.0 - modernc.org/sqlite v1.37.0 -> v1.37.1 Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4188 Reviewed-by: Daenney <daenney@noreply.codeberg.org> Co-authored-by: kim <grufwub@gmail.com> Co-committed-by: kim <grufwub@gmail.com>
Diffstat (limited to 'vendor/modernc.org/memory/mmap_unix.go')
-rw-r--r--vendor/modernc.org/memory/mmap_unix.go18
1 files changed, 12 insertions, 6 deletions
diff --git a/vendor/modernc.org/memory/mmap_unix.go b/vendor/modernc.org/memory/mmap_unix.go
index ef6c9a539..8ee991538 100644
--- a/vendor/modernc.org/memory/mmap_unix.go
+++ b/vendor/modernc.org/memory/mmap_unix.go
@@ -14,7 +14,7 @@ import (
"unsafe"
)
-const pageSizeLog = 20
+const pageSizeLog = 16
var (
osPageMask = osPageSize - 1
@@ -28,21 +28,23 @@ func unmap(addr uintptr, size int) error {
// pageSize aligned.
func mmap(size int) (uintptr, int, error) {
size = roundup(size, osPageSize)
- up, err := unix.MmapPtr(-1, 0, nil, uintptr(size+pageSize), unix.PROT_READ|unix.PROT_WRITE, unix.MAP_PRIVATE|unix.MAP_ANON)
+ // Ask for more so we can align the result at a pageSize boundary
+ n := size + pageSize
+ up, err := unix.MmapPtr(-1, 0, nil, uintptr(n), unix.PROT_READ|unix.PROT_WRITE, unix.MAP_PRIVATE|unix.MAP_ANON)
if err != nil {
return 0, 0, err
}
p := uintptr(up)
- n := size + pageSize
if p&uintptr(osPageMask) != 0 {
panic("internal error")
}
mod := int(p) & pageMask
- if mod != 0 {
+ if mod != 0 { // Return the extra part before pageSize aligned block
m := pageSize - mod
if err := unmap(p, m); err != nil {
+ unmap(p, n) // Do not leak the first mmap
return 0, 0, err
}
@@ -54,9 +56,13 @@ func mmap(size int) (uintptr, int, error) {
panic("internal error")
}
- if n-size != 0 {
+ if n > size { // Return the extra part after pageSize aligned block
if err := unmap(p+uintptr(size), n-size); err != nil {
- return 0, 0, err
+ // Do not error when the kernel rejects the extra part after, just return the
+ // unexpectedly enlarged size.
+ //
+ // Fixes the bigsort.test failures on linux/s390x, see: https://gitlab.com/cznic/sqlite/-/issues/207
+ size = n
}
}