aboutsummaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/mem_js.go13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/runtime/mem_js.go b/src/runtime/mem_js.go
index 699a80db26..092b3d4fa2 100644
--- a/src/runtime/mem_js.go
+++ b/src/runtime/mem_js.go
@@ -7,7 +7,6 @@
package runtime
import (
- "runtime/internal/sys"
"unsafe"
)
@@ -52,14 +51,18 @@ func sysReserve(v unsafe.Pointer, n uintptr) unsafe.Pointer {
return nil
}
- if reserveEnd < lastmoduledatap.end {
- reserveEnd = lastmoduledatap.end
+ // Round up the initial reserveEnd to 64 KiB so that
+ // reservations are always aligned to the page size.
+ initReserveEnd := alignUp(lastmoduledatap.end, physPageSize)
+ if reserveEnd < initReserveEnd {
+ reserveEnd = initReserveEnd
}
v = unsafe.Pointer(reserveEnd)
- reserveEnd += n
+ reserveEnd += alignUp(n, physPageSize)
current := currentMemory()
- needed := int32(reserveEnd/sys.DefaultPhysPageSize + 1)
+ // reserveEnd is always at a page boundary.
+ needed := int32(reserveEnd / physPageSize)
if current < needed {
if growMemory(needed-current) == -1 {
return nil