aboutsummaryrefslogtreecommitdiff
path: root/libgo/runtime/go-libmain.c
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2016-02-12 22:10:09 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2016-02-12 22:10:09 +0000
commit54c9c975f182aacae65a925b86b8770e2503b950 (patch)
tree0f1bf2665d8697cd161c1f9d5271e3db262ac73e /libgo/runtime/go-libmain.c
parent37064e3daf756e60b7725b8fee74ddb6785511ac (diff)
downloadgcc-54c9c975f182aacae65a925b86b8770e2503b950.zip
gcc-54c9c975f182aacae65a925b86b8770e2503b950.tar.gz
gcc-54c9c975f182aacae65a925b86b8770e2503b950.tar.bz2
runtime: For c-archive/c-shared, install signal handlers synchronously.
This is a port of https://golang.org/cl/18150 to the gccgo runtime. The previous behaviour of installing the signal handlers in a separate thread meant that Go initialization raced with non-Go initialization if the non-Go initialization also wanted to install signal handlers. Make installing signal handlers synchronous so that the process-wide behavior is predictable. Reviewed-on: https://go-review.googlesource.com/19494 From-SVN: r233393
Diffstat (limited to 'libgo/runtime/go-libmain.c')
-rw-r--r--libgo/runtime/go-libmain.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/libgo/runtime/go-libmain.c b/libgo/runtime/go-libmain.c
index f578aab..6884f3a 100644
--- a/libgo/runtime/go-libmain.c
+++ b/libgo/runtime/go-libmain.c
@@ -59,6 +59,10 @@ initfn (int argc, char **argv, char** env __attribute__ ((unused)))
struct args *a;
pthread_t tid;
+ runtime_isarchive = true;
+
+ runtime_initsig(true);
+
a = (struct args *) malloc (sizeof *a);
if (a == NULL)
die ("malloc", errno);
@@ -88,8 +92,6 @@ gostart (void *arg)
{
struct args *a = (struct args *) arg;
- runtime_isarchive = true;
-
if (runtime_isstarted)
return NULL;
runtime_isstarted = true;