diff options
author | Craig A. Berry <craigberry@mac.com> | 2002-03-23 17:23:00 -0600 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2002-03-24 04:48:19 +0000 |
commit | 05c058bc16a76532007427c68eaafb53a23230dc (patch) | |
tree | 47b0491ba687e0377f10fe3a388b03e553e8fa7d /vms | |
parent | 41f7d5685018fc726af602078e1eed7cf60d711e (diff) | |
download | perl-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.c | 13 |
1 files changed, 9 insertions, 4 deletions
@@ -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 |