From: Mikio Hara Date: Wed, 14 Mar 2012 03:49:59 +0000 (+0900) Subject: runtime/cgo: darwin signal masking X-Git-Tag: weekly.2012-03-22~104 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=1fc9a17c7ea276ee80045dc8cc9411eb024cf8ea;p=gostls13.git runtime/cgo: darwin signal masking Fixes #3101 (again). R=golang-dev, rsc CC=golang-dev https://golang.org/cl/5825043 --- diff --git a/src/pkg/runtime/cgo/gcc_darwin_386.c b/src/pkg/runtime/cgo/gcc_darwin_386.c index d9f25347a5..2c30c666fc 100644 --- a/src/pkg/runtime/cgo/gcc_darwin_386.c +++ b/src/pkg/runtime/cgo/gcc_darwin_386.c @@ -4,6 +4,7 @@ #include /* for strerror */ #include +#include #include "libcgo.h" static void* threadentry(void*); @@ -120,14 +121,21 @@ void libcgo_sys_thread_start(ThreadStart *ts) { pthread_attr_t attr; + sigset_t ign, oset; pthread_t p; size_t size; int err; + sigfillset(&ign); + sigprocmask(SIG_SETMASK, &ign, &oset); + pthread_attr_init(&attr); pthread_attr_getstacksize(&attr, &size); ts->g->stackguard = size; err = pthread_create(&p, &attr, threadentry, ts); + + sigprocmask(SIG_SETMASK, &oset, nil); + if (err != 0) { fprintf(stderr, "runtime/cgo: pthread_create failed: %s\n", strerror(err)); abort(); diff --git a/src/pkg/runtime/cgo/gcc_darwin_amd64.c b/src/pkg/runtime/cgo/gcc_darwin_amd64.c index a0b026ee2b..89dc7a4e8e 100644 --- a/src/pkg/runtime/cgo/gcc_darwin_amd64.c +++ b/src/pkg/runtime/cgo/gcc_darwin_amd64.c @@ -4,6 +4,7 @@ #include /* for strerror */ #include +#include #include "libcgo.h" static void* threadentry(void*); @@ -90,14 +91,21 @@ void libcgo_sys_thread_start(ThreadStart *ts) { pthread_attr_t attr; + sigset_t ign, oset; pthread_t p; size_t size; int err; + sigfillset(&ign); + sigprocmask(SIG_SETMASK, &ign, &oset); + pthread_attr_init(&attr); pthread_attr_getstacksize(&attr, &size); ts->g->stackguard = size; err = pthread_create(&p, &attr, threadentry, ts); + + sigprocmask(SIG_SETMASK, &oset, nil); + if (err != 0) { fprintf(stderr, "runtime/cgo: pthread_create failed: %s\n", strerror(err)); abort();