diff options
author | Ian Lance Taylor <iant@golang.org> | 2010-06-28 17:14:17 -0700 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2010-06-28 17:14:17 -0700 |
commit | 131ca40edefeda8e6a36cd8b9caab670f8ec9d29 (patch) | |
tree | 35af611f8ee9a7d98c81e7a25d130bd4bfbfd0e0 | |
parent | 1a590f43544be33cf60656924ad246378f8a0238 (diff) | |
download | golang-131ca40edefeda8e6a36cd8b9caab670f8ec9d29.tar.gz |
Only catch all signals if os/signal package imported.
Fixes issue 776.
R=rsc
CC=golang-dev
http://codereview.appspot.com/1745041
-rw-r--r-- | src/pkg/runtime/darwin/386/signal.c | 4 | ||||
-rw-r--r-- | src/pkg/runtime/darwin/amd64/signal.c | 4 | ||||
-rw-r--r-- | src/pkg/runtime/freebsd/386/signal.c | 4 | ||||
-rw-r--r-- | src/pkg/runtime/freebsd/amd64/signal.c | 4 | ||||
-rw-r--r-- | src/pkg/runtime/linux/386/signal.c | 4 | ||||
-rw-r--r-- | src/pkg/runtime/linux/amd64/signal.c | 4 | ||||
-rw-r--r-- | src/pkg/runtime/linux/arm/signal.c | 4 | ||||
-rw-r--r-- | src/pkg/runtime/nacl/386/signal.c | 2 | ||||
-rw-r--r-- | src/pkg/runtime/runtime.c | 2 | ||||
-rw-r--r-- | src/pkg/runtime/runtime.h | 2 | ||||
-rw-r--r-- | src/pkg/runtime/sigqueue.goc | 1 | ||||
-rw-r--r-- | src/pkg/runtime/tiny/thread.c | 2 | ||||
-rw-r--r-- | src/pkg/runtime/windows/386/signal.c | 2 |
13 files changed, 27 insertions, 12 deletions
diff --git a/src/pkg/runtime/darwin/386/signal.c b/src/pkg/runtime/darwin/386/signal.c index b4af42bb4..f7ee3c448 100644 --- a/src/pkg/runtime/darwin/386/signal.c +++ b/src/pkg/runtime/darwin/386/signal.c @@ -129,7 +129,7 @@ signalstack(byte *p, int32 n) } void -initsig(void) +initsig(int32 queue) { int32 i; static Sigaction sa; @@ -141,6 +141,8 @@ initsig(void) sa.sa_tramp = sigtramp; // sigtramp's job is to call into real handler for(i = 0; i<NSIG; i++) { if(sigtab[i].flags) { + if((sigtab[i].flags & SigQueue) != queue) + continue; if(sigtab[i].flags & (SigCatch | SigQueue)) { sa.__sigaction_u.__sa_sigaction = sighandler; } else { diff --git a/src/pkg/runtime/darwin/amd64/signal.c b/src/pkg/runtime/darwin/amd64/signal.c index b3fa8404f..648ef207c 100644 --- a/src/pkg/runtime/darwin/amd64/signal.c +++ b/src/pkg/runtime/darwin/amd64/signal.c @@ -138,7 +138,7 @@ signalstack(byte *p, int32 n) } void -initsig(void) +initsig(int32 queue) { int32 i; static Sigaction sa; @@ -150,6 +150,8 @@ initsig(void) sa.sa_tramp = sigtramp; // sigtramp's job is to call into real handler for(i = 0; i<NSIG; i++) { if(sigtab[i].flags) { + if((sigtab[i].flags & SigQueue) != queue) + continue; if(sigtab[i].flags & (SigCatch | SigQueue)) { sa.__sigaction_u.__sa_sigaction = sighandler; } else { diff --git a/src/pkg/runtime/freebsd/386/signal.c b/src/pkg/runtime/freebsd/386/signal.c index 44a868e35..4fc6d9e12 100644 --- a/src/pkg/runtime/freebsd/386/signal.c +++ b/src/pkg/runtime/freebsd/386/signal.c @@ -124,7 +124,7 @@ signalstack(byte *p, int32 n) } void -initsig(void) +initsig(int32 queue) { static Sigaction sa; @@ -136,6 +136,8 @@ initsig(void) for(i = 0; i < NSIG; i++) { if(sigtab[i].flags) { + if((sigtab[i].flags & SigQueue) != queue) + continue; if(sigtab[i].flags & (SigCatch | SigQueue)) sa.__sigaction_u.__sa_sigaction = (void*) sigtramp; else diff --git a/src/pkg/runtime/freebsd/amd64/signal.c b/src/pkg/runtime/freebsd/amd64/signal.c index e153752db..57bfcfb55 100644 --- a/src/pkg/runtime/freebsd/amd64/signal.c +++ b/src/pkg/runtime/freebsd/amd64/signal.c @@ -132,7 +132,7 @@ signalstack(byte *p, int32 n) } void -initsig(void) +initsig(int32 queue) { static Sigaction sa; @@ -144,6 +144,8 @@ initsig(void) for(i = 0; i < NSIG; i++) { if(sigtab[i].flags) { + if((sigtab[i].flags & SigQueue) != queue) + continue; if(sigtab[i].flags & (SigCatch | SigQueue)) sa.__sigaction_u.__sa_sigaction = (void*) sigtramp; else diff --git a/src/pkg/runtime/linux/386/signal.c b/src/pkg/runtime/linux/386/signal.c index 2d8ad57b2..6bc95d0d7 100644 --- a/src/pkg/runtime/linux/386/signal.c +++ b/src/pkg/runtime/linux/386/signal.c @@ -116,7 +116,7 @@ signalstack(byte *p, int32 n) } void -initsig(void) +initsig(int32 queue) { static Sigaction sa; @@ -128,6 +128,8 @@ initsig(void) sa.sa_restorer = (void*)sigreturn; for(i = 0; i<NSIG; i++) { if(sigtab[i].flags) { + if((sigtab[i].flags & SigQueue) != queue) + continue; if(sigtab[i].flags & (SigCatch | SigQueue)) sa.k_sa_handler = (void*)sigtramp; else diff --git a/src/pkg/runtime/linux/amd64/signal.c b/src/pkg/runtime/linux/amd64/signal.c index 1dfeb5f05..63c3a2e6e 100644 --- a/src/pkg/runtime/linux/amd64/signal.c +++ b/src/pkg/runtime/linux/amd64/signal.c @@ -126,7 +126,7 @@ signalstack(byte *p, int32 n) } void -initsig(void) +initsig(int32 queue) { static Sigaction sa; @@ -138,6 +138,8 @@ initsig(void) sa.sa_restorer = (void*)sigreturn; for(i = 0; i<NSIG; i++) { if(sigtab[i].flags) { + if((sigtab[i].flags & SigQueue) != queue) + continue; if(sigtab[i].flags & (SigCatch | SigQueue)) sa.sa_handler = (void*)sigtramp; else diff --git a/src/pkg/runtime/linux/arm/signal.c b/src/pkg/runtime/linux/arm/signal.c index 68d10ea65..a9dccae4a 100644 --- a/src/pkg/runtime/linux/arm/signal.c +++ b/src/pkg/runtime/linux/arm/signal.c @@ -120,7 +120,7 @@ signalstack(byte *p, int32 n) } void -initsig(void) +initsig(int32 queue) { static Sigaction sa; @@ -133,6 +133,8 @@ initsig(void) sa.sa_restorer = (void*)sigreturn; for(i = 0; i<NSIG; i++) { if(sigtab[i].flags) { + if((sigtab[i].flags & SigQueue) != queue) + continue; if(sigtab[i].flags & (SigCatch | SigQueue)) sa.sa_handler = (void*)sigtramp; else diff --git a/src/pkg/runtime/nacl/386/signal.c b/src/pkg/runtime/nacl/386/signal.c index 79a760a36..4dda63fcf 100644 --- a/src/pkg/runtime/nacl/386/signal.c +++ b/src/pkg/runtime/nacl/386/signal.c @@ -8,7 +8,7 @@ #include "os.h" void -initsig(void) +initsig(int32 queue) { } diff --git a/src/pkg/runtime/runtime.c b/src/pkg/runtime/runtime.c index e83006c19..25a6f26bd 100644 --- a/src/pkg/runtime/runtime.c +++ b/src/pkg/runtime/runtime.c @@ -278,7 +278,7 @@ check(void) if(z != 4) throw("cas4"); - initsig(); + initsig(0); } /* diff --git a/src/pkg/runtime/runtime.h b/src/pkg/runtime/runtime.h index 1bce98e25..a774d96d5 100644 --- a/src/pkg/runtime/runtime.h +++ b/src/pkg/runtime/runtime.h @@ -389,7 +389,7 @@ String catstring(String, String); String gostring(byte*); String gostringnocopy(byte*); String gostringw(uint16*); -void initsig(void); +void initsig(int32); int32 gotraceback(void); void traceback(uint8 *pc, uint8 *sp, uint8 *lr, G* gp); void tracebackothers(G*); diff --git a/src/pkg/runtime/sigqueue.goc b/src/pkg/runtime/sigqueue.goc index 46a3b1274..572daab52 100644 --- a/src/pkg/runtime/sigqueue.goc +++ b/src/pkg/runtime/sigqueue.goc @@ -94,5 +94,6 @@ func Signame(sig int32) (name String) { } func Siginit() { + initsig(SigQueue); sig.inuse = true; // enable reception of signals; cannot disable } diff --git a/src/pkg/runtime/tiny/thread.c b/src/pkg/runtime/tiny/thread.c index e3e8a34b6..e4b58256f 100644 --- a/src/pkg/runtime/tiny/thread.c +++ b/src/pkg/runtime/tiny/thread.c @@ -17,7 +17,7 @@ osinit(void) } void -initsig(void) +initsig(int32 queue) { } diff --git a/src/pkg/runtime/windows/386/signal.c b/src/pkg/runtime/windows/386/signal.c index ba3882391..663ed874b 100644 --- a/src/pkg/runtime/windows/386/signal.c +++ b/src/pkg/runtime/windows/386/signal.c @@ -3,6 +3,6 @@ // license that can be found in the LICENSE file. void -initsig(void) +initsig(int32 queue) { } |