summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2010-06-28 17:14:17 -0700
committerIan Lance Taylor <iant@golang.org>2010-06-28 17:14:17 -0700
commit131ca40edefeda8e6a36cd8b9caab670f8ec9d29 (patch)
tree35af611f8ee9a7d98c81e7a25d130bd4bfbfd0e0
parent1a590f43544be33cf60656924ad246378f8a0238 (diff)
downloadgolang-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.c4
-rw-r--r--src/pkg/runtime/darwin/amd64/signal.c4
-rw-r--r--src/pkg/runtime/freebsd/386/signal.c4
-rw-r--r--src/pkg/runtime/freebsd/amd64/signal.c4
-rw-r--r--src/pkg/runtime/linux/386/signal.c4
-rw-r--r--src/pkg/runtime/linux/amd64/signal.c4
-rw-r--r--src/pkg/runtime/linux/arm/signal.c4
-rw-r--r--src/pkg/runtime/nacl/386/signal.c2
-rw-r--r--src/pkg/runtime/runtime.c2
-rw-r--r--src/pkg/runtime/runtime.h2
-rw-r--r--src/pkg/runtime/sigqueue.goc1
-rw-r--r--src/pkg/runtime/tiny/thread.c2
-rw-r--r--src/pkg/runtime/windows/386/signal.c2
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)
{
}