mirror of
https://github.com/golang/go
synced 2024-11-18 00:54:45 -07:00
runtime: handle sysReserve failure in mHeap_SysAlloc
sysReserve will return nil on failure - correctly handle this case and return nil to the caller. Currently, a failure will result in h.arena_end being set to psize, h.arena_used being set to zero and fun times ensue. On the openbsd/arm builder this has resulted in: runtime: address space conflict: map(0x0) = 0x40946000 fatal error: runtime: address space conflict When it should be reporting out of memory instead. Change-Id: Iba828d5ee48ee1946de75eba409e0cfb04f089d4 Reviewed-on: https://go-review.googlesource.com/15056 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Austin Clements <austin@google.com>
This commit is contained in:
parent
59bacb285c
commit
1d5251f707
@ -398,6 +398,9 @@ func mHeap_SysAlloc(h *mheap, n uintptr) unsafe.Pointer {
|
|||||||
// is reserved and part is not.
|
// is reserved and part is not.
|
||||||
var reserved bool
|
var reserved bool
|
||||||
p := uintptr(sysReserve((unsafe.Pointer)(h.arena_end), p_size, &reserved))
|
p := uintptr(sysReserve((unsafe.Pointer)(h.arena_end), p_size, &reserved))
|
||||||
|
if p == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if p == h.arena_end {
|
if p == h.arena_end {
|
||||||
h.arena_end = new_end
|
h.arena_end = new_end
|
||||||
h.arena_reserved = reserved
|
h.arena_reserved = reserved
|
||||||
|
Loading…
Reference in New Issue
Block a user