mirror of
https://github.com/golang/go
synced 2024-11-21 22:24:40 -07:00
runtime: correct out of memory error
Fixes #1511. R=golang-dev, iant2 CC=golang-dev https://golang.org/cl/4433065
This commit is contained in:
parent
4efdeeec51
commit
a8bf6f32cc
@ -36,6 +36,11 @@ runtime·SysReserve(void *v, uintptr n)
|
||||
return runtime·mmap(v, n, PROT_NONE, MAP_ANON|MAP_PRIVATE, -1, 0);
|
||||
}
|
||||
|
||||
enum
|
||||
{
|
||||
ENOMEM = 12,
|
||||
};
|
||||
|
||||
void
|
||||
runtime·SysMap(void *v, uintptr n)
|
||||
{
|
||||
@ -43,6 +48,8 @@ runtime·SysMap(void *v, uintptr n)
|
||||
|
||||
mstats.sys += n;
|
||||
p = runtime·mmap(v, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_FIXED|MAP_PRIVATE, -1, 0);
|
||||
if(p == (void*)-ENOMEM)
|
||||
runtime·throw("runtime: out of memory");
|
||||
if(p != v)
|
||||
runtime·throw("runtime: cannot map pages in arena address space");
|
||||
}
|
||||
|
@ -42,6 +42,11 @@ runtime·SysReserve(void *v, uintptr n)
|
||||
return runtime·mmap(v, n, PROT_NONE, MAP_ANON|MAP_PRIVATE, -1, 0);
|
||||
}
|
||||
|
||||
enum
|
||||
{
|
||||
ENOMEM = 12,
|
||||
};
|
||||
|
||||
void
|
||||
runtime·SysMap(void *v, uintptr n)
|
||||
{
|
||||
@ -52,6 +57,8 @@ runtime·SysMap(void *v, uintptr n)
|
||||
// On 64-bit, we don't actually have v reserved, so tread carefully.
|
||||
if(sizeof(void*) == 8) {
|
||||
p = runtime·mmap(v, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, -1, 0);
|
||||
if(p == (void*)-ENOMEM)
|
||||
runtime·throw("runtime: out of memory");
|
||||
if(p != v) {
|
||||
runtime·printf("runtime: address space conflict: map(%p) = %p\n", v, p);
|
||||
runtime·throw("runtime: address space conflict");
|
||||
@ -60,6 +67,8 @@ runtime·SysMap(void *v, uintptr n)
|
||||
}
|
||||
|
||||
p = runtime·mmap(v, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_FIXED|MAP_PRIVATE, -1, 0);
|
||||
if(p == (void*)-ENOMEM)
|
||||
runtime·throw("runtime: out of memory");
|
||||
if(p != v)
|
||||
runtime·throw("runtime: cannot map pages in arena address space");
|
||||
}
|
||||
|
@ -48,6 +48,11 @@ runtime·SysReserve(void *v, uintptr n)
|
||||
return runtime·mmap(v, n, PROT_NONE, MAP_ANON|MAP_PRIVATE, -1, 0);
|
||||
}
|
||||
|
||||
enum
|
||||
{
|
||||
ENOMEM = 12,
|
||||
};
|
||||
|
||||
void
|
||||
runtime·SysMap(void *v, uintptr n)
|
||||
{
|
||||
@ -66,6 +71,8 @@ runtime·SysMap(void *v, uintptr n)
|
||||
}
|
||||
|
||||
p = runtime·mmap(v, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_FIXED|MAP_PRIVATE, -1, 0);
|
||||
if(p == (void*)-ENOMEM)
|
||||
runtime·throw("runtime: out of memory");
|
||||
if(p != v)
|
||||
runtime·throw("runtime: cannot map pages in arena address space");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user