Commit 4e69976a authored by Alex Brainman's avatar Alex Brainman

runtime: fix SysFree to really free memory on Windows

Fixes #1294.

R=golang-dev, PeterGo, iant
CC=golang-dev
https://golang.org/cl/3271041
parent 86cdbfb5
...@@ -15,10 +15,25 @@ enum { ...@@ -15,10 +15,25 @@ enum {
PAGE_EXECUTE_READWRITE = 0x40, PAGE_EXECUTE_READWRITE = 0x40,
}; };
static void
abort(int8 *name)
{
uintptr errno;
errno = (uintptr)runtime·stdcall(runtime·GetLastError, 0);
runtime·printf("%s failed with errno=%d\n", name, errno);
runtime·throw(name);
}
void* void*
runtime·SysAlloc(uintptr n) runtime·SysAlloc(uintptr n)
{ {
return runtime·stdcall(runtime·VirtualAlloc, 4, nil, n, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); void *v;
v = runtime·stdcall(runtime·VirtualAlloc, 4, nil, n, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if(v == 0)
abort("VirtualAlloc");
return v;
} }
void void
...@@ -31,7 +46,11 @@ runtime·SysUnused(void *v, uintptr n) ...@@ -31,7 +46,11 @@ runtime·SysUnused(void *v, uintptr n)
void void
runtime·SysFree(void *v, uintptr n) runtime·SysFree(void *v, uintptr n)
{ {
runtime·stdcall(runtime·VirtualFree, 3, v, n, MEM_RELEASE); uintptr r;
r = (uintptr)runtime·stdcall(runtime·VirtualFree, 3, v, 0, MEM_RELEASE);
if(r == 0)
abort("VirtualFree");
} }
void void
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment