]> Cypherpunks repositories - gostls13.git/commitdiff
Only catch all signals if os/signal package imported.
authorIan Lance Taylor <iant@golang.org>
Tue, 29 Jun 2010 00:14:17 +0000 (17:14 -0700)
committerIan Lance Taylor <iant@golang.org>
Tue, 29 Jun 2010 00:14:17 +0000 (17:14 -0700)
Fixes #776.

R=rsc
CC=golang-dev
https://golang.org/cl/1745041

13 files changed:
src/pkg/runtime/darwin/386/signal.c
src/pkg/runtime/darwin/amd64/signal.c
src/pkg/runtime/freebsd/386/signal.c
src/pkg/runtime/freebsd/amd64/signal.c
src/pkg/runtime/linux/386/signal.c
src/pkg/runtime/linux/amd64/signal.c
src/pkg/runtime/linux/arm/signal.c
src/pkg/runtime/nacl/386/signal.c
src/pkg/runtime/runtime.c
src/pkg/runtime/runtime.h
src/pkg/runtime/sigqueue.goc
src/pkg/runtime/tiny/thread.c
src/pkg/runtime/windows/386/signal.c

index b4af42bb4f938cb25b437d3c397e4fba99723b1b..f7ee3c448f09a69675b16ac8f5df4bda6bdb7b51 100644 (file)
@@ -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 {
index b3fa8404f188bcec6c76986fce5485828c7c3d0c..648ef207ca6b928549db2953a2ba162ce33611a1 100644 (file)
@@ -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 {
index 44a868e35314ff338454c7d5bd7fdf292fd86cac..4fc6d9e12e8aa6ca51954e232145bb6d77a6c34f 100644 (file)
@@ -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
index e153752db7a001c55a775219d2c65e5952304095..57bfcfb55ebed852c6aa484ed7aeb2cc26041f13 100644 (file)
@@ -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
index 2d8ad57b2ac94689dd3d24e4108cb0b0a979a6be..6bc95d0d793398f2e92d54cb1fe6ace480a12ae6 100644 (file)
@@ -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
index 1dfeb5f0519d645fd3131f2963a12b7b41a4f3bf..63c3a2e6ea530e4fcb96183aade0c64679fca681 100644 (file)
@@ -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
index 68d10ea65af52157950b9e029a016b1f9737c054..a9dccae4a95c8c8978571e208521df1d949e6fe6 100644 (file)
@@ -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
index 79a760a36049a8f23be4e131fa1b75098156bc1c..4dda63fcf6c323f34cbc92258c9b10ba40971fa3 100644 (file)
@@ -8,7 +8,7 @@
 #include "os.h"
 
 void
-initsig(void)
+initsig(int32 queue)
 {
 }
 
index e83006c19dceadc821221710a6f228973fc07bc5..25a6f26bdf9cdc8f3f1efbb0869a5137b4576f3a 100644 (file)
@@ -278,7 +278,7 @@ check(void)
        if(z != 4)
                throw("cas4");
 
-       initsig();
+       initsig(0);
 }
 
 /*
index 1bce98e256e188c4cdd236ec2cbe7489b0246200..a774d96d50b1556bdf842151cba05b4c4316c258 100644 (file)
@@ -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*);
index 46a3b1274a8b3f17b71962793e11ee3c0e297ca6..572daab525a5e1358cc1c0e311f4f1d3b0243701 100644 (file)
@@ -94,5 +94,6 @@ func Signame(sig int32) (name String) {
 }
 
 func Siginit() {
+       initsig(SigQueue);
        sig.inuse = true;       // enable reception of signals; cannot disable
 }
index e3e8a34b601f641f9e4fe46e87e4ea5fb65161bc..e4b58256f256c521c25a3706c04b7f9764604fde 100644 (file)
@@ -17,7 +17,7 @@ osinit(void)
 }
 
 void
-initsig(void)
+initsig(int32 queue)
 {
 }
 
index ba38823911d8107b2cff8f2608822fa21bb1d9df..663ed874bd2634e574a83d1bc82b6e4e0deb1748 100644 (file)
@@ -3,6 +3,6 @@
 // license that can be found in the LICENSE file.
 
 void
-initsig(void)
+initsig(int32 queue)
 {
 }