aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/runtime/windows/thread.c
diff options
context:
space:
mode:
authorHector Chu <hectorchu@gmail.com>2011-09-30 11:33:13 -0700
committerRob Pike <r@golang.org>2011-09-30 11:33:13 -0700
commit38d3f585288d9640d428fd9d6afd429815f01730 (patch)
tree7c00ea0f79dfe96c843ac2df4d19eeb98196fd77 /src/pkg/runtime/windows/thread.c
parenta7a7cc5a55690350eeee4d1aa26ca460f61c4b56 (diff)
downloadgo-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.c29
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)