diff --git a/src/pkg/runtime/proc.c b/src/pkg/runtime/proc.c index 844128c87c..962f748ce8 100644 --- a/src/pkg/runtime/proc.c +++ b/src/pkg/runtime/proc.c @@ -734,6 +734,12 @@ runtime·mstart(void) m->g0->sched.pc = (void*)-1; // make sure it is never used runtime·asminit(); runtime·minit(); + + // Install signal handlers; after minit so that minit can + // prepare the thread to be able to handle the signals. + if(m == &runtime·m0) + runtime·initsig(); + schedule(nil); } @@ -1161,7 +1167,7 @@ runtime·malg(int32 stacksize) { G *newg; byte *stk; - + if(StackTop < sizeof(Stktop)) { runtime·printf("runtime: SizeofStktop=%d, should be >=%d\n", (int32)StackTop, (int32)sizeof(Stktop)); runtime·throw("runtime: bad stack.h"); diff --git a/src/pkg/runtime/runtime.c b/src/pkg/runtime/runtime.c index afe8c5abeb..ebb5544fba 100644 --- a/src/pkg/runtime/runtime.c +++ b/src/pkg/runtime/runtime.c @@ -119,7 +119,7 @@ void runtime·panicstring(int8 *s) { Eface err; - + if(m->gcing) { runtime·printf("panic: %s\n", s); runtime·throw("panic during gc"); @@ -189,7 +189,7 @@ runtime·goargs(void) { String *s; int32 i; - + // for windows implementation see "os" package if(Windows) return; @@ -207,7 +207,7 @@ runtime·goenvs_unix(void) { String *s; int32 i, n; - + for(n=0; argv[argc+1+n] != 0; n++) ; @@ -342,8 +342,6 @@ runtime·check(void) runtime·throw("float32nan2"); if(!(i != i1)) runtime·throw("float32nan3"); - - runtime·initsig(); } void