summaryrefslogtreecommitdiff
path: root/src/pkg/runtime/sigqueue.cgo
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/runtime/sigqueue.cgo')
-rw-r--r--src/pkg/runtime/sigqueue.cgo14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/pkg/runtime/sigqueue.cgo b/src/pkg/runtime/sigqueue.cgo
index 059d3edd1..c3751c5d2 100644
--- a/src/pkg/runtime/sigqueue.cgo
+++ b/src/pkg/runtime/sigqueue.cgo
@@ -43,6 +43,7 @@ package runtime
static struct {
Note;
uint32 mask;
+ bool inuse;
} sig;
void
@@ -52,24 +53,27 @@ siginit(void)
}
// Called from sighandler to send a signal back out of the signal handling thread.
-void
+bool
sigsend(int32 s)
{
uint32 bit, mask;
+ if(!sig.inuse)
+ return false;
bit = 1 << s;
for(;;) {
mask = sig.mask;
if(mask & bit)
- return; // signal already in queue
+ break; // signal already in queue
if(cas(&sig.mask, mask, mask|bit)) {
// Added to queue.
// Only send a wakeup for the first signal in each round.
if(mask == 0)
notewakeup(&sig);
- return;
+ break;
}
}
+ return true;
}
// Called to receive a bitmask of queued signals.
@@ -88,3 +92,7 @@ func Sigrecv() (m uint32) {
func Signame(sig int32) (name String) {
name = signame(sig);
}
+
+func Siginit() {
+ sig.inuse = true; // enable reception of signals; cannot disable
+}