summaryrefslogtreecommitdiff
path: root/vms
diff options
context:
space:
mode:
authorCraig A. Berry <craigberry@mac.com>2002-03-23 17:23:00 -0600
committerJarkko Hietaniemi <jhi@iki.fi>2002-03-24 04:48:19 +0000
commit05c058bc16a76532007427c68eaafb53a23230dc (patch)
tree47b0491ba687e0377f10fe3a388b03e553e8fa7d /vms
parent41f7d5685018fc726af602078e1eed7cf60d711e (diff)
downloadperl-05c058bc16a76532007427c68eaafb53a23230dc.tar.gz
extend use of home-grown kill() on VMS
From: "Craig A. Berry" <craigberry@mac.com> Message-Id: <a05101504b8c30e72f3e4@[172.16.52.1]> p4raw-id: //depot/perl@15459
Diffstat (limited to 'vms')
-rw-r--r--vms/vms.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/vms/vms.c b/vms/vms.c
index 47716c3bdd..4ae554157c 100644
--- a/vms/vms.c
+++ b/vms/vms.c
@@ -1096,13 +1096,18 @@ Perl_my_sigaction (pTHX_ int sig, const struct sigaction* act,
#ifdef KILL_BY_SIGPRC
#include <errnodef.h>
-/* okay, this is some BLATENT hackery ...
- we use this if the kill() in the CRTL uses sys$forcex, causing the
+/* We implement our own kill() using the undocumented system service
+ sys$sigprc for one of two reasons:
+
+ 1.) If the kill() in an older CRTL uses sys$forcex, causing the
target process to do a sys$exit, which usually can't be handled
gracefully...certainly not by Perl and the %SIG{} mechanism.
- Instead we use the (undocumented) system service sys$sigprc.
- It has the same parameters as sys$forcex, but throws an exception
+ 2.) If the kill() in the CRTL can't be called from a signal
+ handler without disappearing into the ether, i.e., the signal
+ it purportedly sends is never trapped. Still true as of VMS 7.3.
+
+ sys$sigprc has the same parameters as sys$forcex, but throws an exception
in the target process rather than calling sys$exit.
Note that distinguishing SIGSEGV from SIGBUS requires an extra arg