diff mbox

Go patch committed: Multiplex goroutines onto OS threads

Message ID ydd7h2gtfg7.fsf@manam.CeBiTec.Uni-Bielefeld.DE
State New
Headers show

Commit Message

Rainer Orth Dec. 1, 2011, 4:38 p.m. UTC
Ian Lance Taylor <iant@google.com> writes:

> This patch changes the Go library to multiplex goroutines onto operating
> system threads.  Previously, each new goroutine ran in a separate
> thread.  That is inefficient for programs with lots of goroutines.  This
> patch changes the library such that it runs a certain numbers of
> threads, and lets each thread switch between goroutines.  This is how
> the master Go library works, and this patch brings in code from the
> master Go library, adjusted for use by gccgo.
[...]
> Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu.  Tested
> both with and without -fsplit-stack support.  Committed to mainline.

Unfortunately, this patch broke Solaris bootstrap (and would break IRIX
bootstrap if this ever started working again):

/vol/gcc/src/hg/trunk/local/libgo/runtime/go-signal.c:221:1: error: conflicting types for 'sigignore'
In file included from /vol/gcc/src/hg/trunk/local/libgo/runtime/go-signal.c:7:0:
/var/gcc/regression/trunk/8-gcc/build/./gcc/include-fixed/signal.h:100:12: note:
 previous declaration of 'sigignore' was here
make[4]: *** [go-signal.lo] Error 1

<signal.h> on all of Solaris, IRIX, and Tru64 UNIX has

extern int sigignore(int);

I've fixed this by using sig_ignore instead.

	Rainer

Comments

Ian Lance Taylor Dec. 1, 2011, 5:08 p.m. UTC | #1
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> writes:

> Unfortunately, this patch broke Solaris bootstrap (and would break IRIX
> bootstrap if this ever started working again):
>
> /vol/gcc/src/hg/trunk/local/libgo/runtime/go-signal.c:221:1: error: conflicting types for 'sigignore'
> In file included from /vol/gcc/src/hg/trunk/local/libgo/runtime/go-signal.c:7:0:
> /var/gcc/regression/trunk/8-gcc/build/./gcc/include-fixed/signal.h:100:12: note:
>  previous declaration of 'sigignore' was here
> make[4]: *** [go-signal.lo] Error 1
>
> <signal.h> on all of Solaris, IRIX, and Tru64 UNIX has
>
> extern int sigignore(int);
>
> I've fixed this by using sig_ignore instead.

Thanks.  Patch committed.

Ian
diff mbox

Patch

diff --git a/libgo/runtime/go-signal.c b/libgo/runtime/go-signal.c
--- a/libgo/runtime/go-signal.c
+++ b/libgo/runtime/go-signal.c
@@ -218,7 +218,7 @@  sighandler (int sig)
 /* Ignore a signal.  */
 
 static void
-sigignore (int sig __attribute__ ((unused)))
+sig_ignore (int sig __attribute__ ((unused)))
 {
 }
 
@@ -247,7 +247,7 @@  runtime_initsig (int32 queue)
       if (signals[i].catch || signals[i].queue)
 	sa.sa_handler = sighandler;
       else
-	sa.sa_handler = sigignore;
+	sa.sa_handler = sig_ignore;
       sa.sa_flags = signals[i].restart ? SA_RESTART : 0;
       if (sigaction (signals[i].sig, &sa, NULL) != 0)
 	__go_assert (0);