diff options
| author | Hector Chu <hectorchu@gmail.com> | 2011-09-30 11:33:13 -0700 |
|---|---|---|
| committer | Rob Pike <r@golang.org> | 2011-09-30 11:33:13 -0700 |
| commit | 38d3f585288d9640d428fd9d6afd429815f01730 (patch) | |
| tree | 7c00ea0f79dfe96c843ac2df4d19eeb98196fd77 /src/pkg/runtime/windows/thread.c | |
| parent | a7a7cc5a55690350eeee4d1aa26ca460f61c4b56 (diff) | |
| download | go-38d3f585288d9640d428fd9d6afd429815f01730.tar.xz | |
runtime: fix windows build
Add osyield and usleep as required by recent GC changes.
R=golang-dev, r, dsymonds, rsc, r
CC=golang-dev
https://golang.org/cl/5156042
Diffstat (limited to 'src/pkg/runtime/windows/thread.c')
| -rw-r--r-- | src/pkg/runtime/windows/thread.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/pkg/runtime/windows/thread.c b/src/pkg/runtime/windows/thread.c index 97a42d73a0..ff075b77dc 100644 --- a/src/pkg/runtime/windows/thread.c +++ b/src/pkg/runtime/windows/thread.c @@ -17,6 +17,7 @@ #pragma dynimport runtime·GetEnvironmentStringsW GetEnvironmentStringsW "kernel32.dll" #pragma dynimport runtime·GetProcAddress GetProcAddress "kernel32.dll" #pragma dynimport runtime·GetStdHandle GetStdHandle "kernel32.dll" +#pragma dynimport runtime·GetSystemInfo GetSystemInfo "kernel32.dll" #pragma dynimport runtime·GetThreadContext GetThreadContext "kernel32.dll" #pragma dynimport runtime·LoadLibraryEx LoadLibraryExA "kernel32.dll" #pragma dynimport runtime·QueryPerformanceCounter QueryPerformanceCounter "kernel32.dll" @@ -26,6 +27,7 @@ #pragma dynimport runtime·SetEvent SetEvent "kernel32.dll" #pragma dynimport runtime·SetThreadPriority SetThreadPriority "kernel32.dll" #pragma dynimport runtime·SetWaitableTimer SetWaitableTimer "kernel32.dll" +#pragma dynimport runtime·Sleep Sleep "kernel32.dll" #pragma dynimport runtime·SuspendThread SuspendThread "kernel32.dll" #pragma dynimport runtime·timeBeginPeriod timeBeginPeriod "winmm.dll" #pragma dynimport runtime·WaitForSingleObject WaitForSingleObject "kernel32.dll" @@ -41,6 +43,7 @@ extern void *runtime·FreeEnvironmentStringsW; extern void *runtime·GetEnvironmentStringsW; extern void *runtime·GetProcAddress; extern void *runtime·GetStdHandle; +extern void *runtime·GetSystemInfo; extern void *runtime·GetThreadContext; extern void *runtime·LoadLibraryEx; extern void *runtime·QueryPerformanceCounter; @@ -50,6 +53,7 @@ extern void *runtime·SetConsoleCtrlHandler; extern void *runtime·SetEvent; extern void *runtime·SetThreadPriority; extern void *runtime·SetWaitableTimer; +extern void *runtime·Sleep; extern void *runtime·SuspendThread; extern void *runtime·timeBeginPeriod; extern void *runtime·WaitForSingleObject; @@ -57,6 +61,15 @@ extern void *runtime·WriteFile; static int64 timerfreq; +static int32 +getproccount(void) +{ + SystemInfo info; + + runtime·stdcall(runtime·GetSystemInfo, 1, &info); + return info.dwNumberOfProcessors; +} + void runtime·osinit(void) { @@ -67,6 +80,7 @@ runtime·osinit(void) runtime·stdcall(runtime·QueryPerformanceFrequency, 1, &timerfreq); runtime·stdcall(runtime·SetConsoleCtrlHandler, 2, runtime·ctrlhandler, (uintptr)1); runtime·stdcall(runtime·timeBeginPeriod, 1, (uintptr)1); + runtime·ncpu = getproccount(); } void @@ -126,6 +140,21 @@ runtime·write(int32 fd, void *buf, int32 n) return written; } +void +runtime·osyield(void) +{ + runtime·stdcall(runtime·Sleep, 1, (uintptr)0); +} + +void +runtime·usleep(uint32 us) +{ + us /= 1000; + if(us == 0) + us = 1; + runtime·stdcall(runtime·Sleep, 1, (uintptr)us); +} + // Thread-safe allocation of an event. static void initevent(void **pevent) |
