From: Russ Cox Date: Tue, 14 Feb 2012 04:06:21 +0000 (-0500) Subject: runtime: use startpanic so that only one thread handles an incoming SIGQUIT X-Git-Tag: weekly.2012-02-14~46 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=55a54691f931db749e8ddb399b4a55880fa8c642;p=gostls13.git runtime: use startpanic so that only one thread handles an incoming SIGQUIT Typing ^\ delivers the SIGQUIT to all threads, it appears. R=golang-dev, r, iant CC=golang-dev https://golang.org/cl/5657044 --- diff --git a/src/pkg/runtime/signal_darwin_386.c b/src/pkg/runtime/signal_darwin_386.c index 803bd242f3..1844f68a63 100644 --- a/src/pkg/runtime/signal_darwin_386.c +++ b/src/pkg/runtime/signal_darwin_386.c @@ -92,9 +92,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *context, G *gp) return; Throw: - if(runtime·panicking) // traceback already printed - runtime·exit(2); - runtime·panicking = 1; + runtime·startpanic(); if(sig < 0 || sig >= NSIG){ runtime·printf("Signal %d\n", sig); diff --git a/src/pkg/runtime/signal_darwin_amd64.c b/src/pkg/runtime/signal_darwin_amd64.c index 0c954294a5..32c73081c1 100644 --- a/src/pkg/runtime/signal_darwin_amd64.c +++ b/src/pkg/runtime/signal_darwin_amd64.c @@ -102,9 +102,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *context, G *gp) return; Throw: - if(runtime·panicking) // traceback already printed - runtime·exit(2); - runtime·panicking = 1; + runtime·startpanic(); if(sig < 0 || sig >= NSIG){ runtime·printf("Signal %d\n", sig); diff --git a/src/pkg/runtime/signal_freebsd_386.c b/src/pkg/runtime/signal_freebsd_386.c index b07ead62e8..80da95d98a 100644 --- a/src/pkg/runtime/signal_freebsd_386.c +++ b/src/pkg/runtime/signal_freebsd_386.c @@ -89,9 +89,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *context, G *gp) return; Throw: - if(runtime·panicking) // traceback already printed - runtime·exit(2); - runtime·panicking = 1; + runtime·startpanic(); if(sig < 0 || sig >= NSIG) runtime·printf("Signal %d\n", sig); diff --git a/src/pkg/runtime/signal_freebsd_amd64.c b/src/pkg/runtime/signal_freebsd_amd64.c index 2a68609681..e4307682f4 100644 --- a/src/pkg/runtime/signal_freebsd_amd64.c +++ b/src/pkg/runtime/signal_freebsd_amd64.c @@ -97,9 +97,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *context, G *gp) return; Throw: - if(runtime·panicking) // traceback already printed - runtime·exit(2); - runtime·panicking = 1; + runtime·startpanic(); if(sig < 0 || sig >= NSIG) runtime·printf("Signal %d\n", sig); diff --git a/src/pkg/runtime/signal_linux_386.c b/src/pkg/runtime/signal_linux_386.c index b43dbc1121..b154ad8872 100644 --- a/src/pkg/runtime/signal_linux_386.c +++ b/src/pkg/runtime/signal_linux_386.c @@ -85,9 +85,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *context, G *gp) return; Throw: - if(runtime·panicking) // traceback already printed - runtime·exit(2); - runtime·panicking = 1; + runtime·startpanic(); if(sig < 0 || sig >= NSIG) runtime·printf("Signal %d\n", sig); diff --git a/src/pkg/runtime/signal_linux_amd64.c b/src/pkg/runtime/signal_linux_amd64.c index 551744b78d..14095ba61c 100644 --- a/src/pkg/runtime/signal_linux_amd64.c +++ b/src/pkg/runtime/signal_linux_amd64.c @@ -95,9 +95,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *context, G *gp) return; Throw: - if(runtime·panicking) // traceback already printed - runtime·exit(2); - runtime·panicking = 1; + runtime·startpanic(); if(sig < 0 || sig >= NSIG) runtime·printf("Signal %d\n", sig); diff --git a/src/pkg/runtime/signal_netbsd_386.c b/src/pkg/runtime/signal_netbsd_386.c index 739b359ee6..39d829484d 100644 --- a/src/pkg/runtime/signal_netbsd_386.c +++ b/src/pkg/runtime/signal_netbsd_386.c @@ -85,9 +85,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *context, G *gp) return; Throw: - if(runtime·panicking) // traceback already printed - runtime·exit(2); - runtime·panicking = 1; + runtime·startpanic(); if(sig < 0 || sig >= NSIG) runtime·printf("Signal %d\n", sig); diff --git a/src/pkg/runtime/signal_netbsd_amd64.c b/src/pkg/runtime/signal_netbsd_amd64.c index e71f23551d..8b4f624e7c 100644 --- a/src/pkg/runtime/signal_netbsd_amd64.c +++ b/src/pkg/runtime/signal_netbsd_amd64.c @@ -94,9 +94,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *context, G *gp) return; Throw: - if(runtime·panicking) // traceback already printed - runtime·exit(2); - runtime·panicking = 1; + runtime·startpanic(); if(sig < 0 || sig >= NSIG) runtime·printf("Signal %d\n", sig); diff --git a/src/pkg/runtime/signal_openbsd_386.c b/src/pkg/runtime/signal_openbsd_386.c index 739b359ee6..39d829484d 100644 --- a/src/pkg/runtime/signal_openbsd_386.c +++ b/src/pkg/runtime/signal_openbsd_386.c @@ -85,9 +85,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *context, G *gp) return; Throw: - if(runtime·panicking) // traceback already printed - runtime·exit(2); - runtime·panicking = 1; + runtime·startpanic(); if(sig < 0 || sig >= NSIG) runtime·printf("Signal %d\n", sig); diff --git a/src/pkg/runtime/signal_openbsd_amd64.c b/src/pkg/runtime/signal_openbsd_amd64.c index e71f23551d..8b4f624e7c 100644 --- a/src/pkg/runtime/signal_openbsd_amd64.c +++ b/src/pkg/runtime/signal_openbsd_amd64.c @@ -94,9 +94,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *context, G *gp) return; Throw: - if(runtime·panicking) // traceback already printed - runtime·exit(2); - runtime·panicking = 1; + runtime·startpanic(); if(sig < 0 || sig >= NSIG) runtime·printf("Signal %d\n", sig);