diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2016-02-12 22:10:09 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2016-02-12 22:10:09 +0000 |
commit | 54c9c975f182aacae65a925b86b8770e2503b950 (patch) | |
tree | 0f1bf2665d8697cd161c1f9d5271e3db262ac73e /libgo/runtime/go-libmain.c | |
parent | 37064e3daf756e60b7725b8fee74ddb6785511ac (diff) | |
download | gcc-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.c | 6 |
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; |