aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Brainman <alex.brainman@gmail.com>2011-02-15 09:42:25 +1100
committerAlex Brainman <alex.brainman@gmail.com>2011-02-15 09:42:25 +1100
commitff7d7b271f8e53838aa7f0c0e69c782b599547ad (patch)
treedf5663da04d9e046428960750a86377886b8f828
parent29ae8e9a986f9597c922ceae8266b49bf47dc2b7 (diff)
downloadgo-ff7d7b271f8e53838aa7f0c0e69c782b599547ad.tar.gz
go-ff7d7b271f8e53838aa7f0c0e69c782b599547ad.zip
runtime: detect failed thread creation on Windows
Fixes #1495. R=rsc CC=golang-dev https://golang.org/cl/4182047
-rw-r--r--src/pkg/runtime/windows/thread.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/pkg/runtime/windows/thread.c b/src/pkg/runtime/windows/thread.c
index 525fd09801..aedd24200a 100644
--- a/src/pkg/runtime/windows/thread.c
+++ b/src/pkg/runtime/windows/thread.c
@@ -184,11 +184,17 @@ runtime·notesleep(Note *n)
void
runtime·newosproc(M *m, G *g, void *stk, void (*fn)(void))
{
+ void *thandle;
+
USED(stk);
USED(g); // assuming g = m->g0
USED(fn); // assuming fn = mstart
- runtime·stdcall(runtime·CreateThread, 6, 0, 0, runtime·tstart_stdcall, m, 0, 0);
+ thandle = runtime·stdcall(runtime·CreateThread, 6, 0, 0, runtime·tstart_stdcall, m, 0, 0);
+ if(thandle == 0) {
+ runtime·printf("runtime: failed to create new OS thread (have %d already; errno=%d)\n", runtime·mcount(), runtime·getlasterror());
+ runtime·throw("runtime.newosproc");
+ }
}
// Called to initialize a new m (including the bootstrap m).