summaryrefslogtreecommitdiff
path: root/ext/POSIX/POSIX.xs
diff options
context:
space:
mode:
authorNorton T. Allen <allen@huarp.harvard.edu>2001-07-06 08:01:14 -0400
committerJarkko Hietaniemi <jhi@iki.fi>2001-07-07 15:26:16 +0000
commit183bde56275d411115d70eb0564a586647b40e23 (patch)
treecaa7b41a5e5f638efeec1badf7f7ed2f0b8f23e7 /ext/POSIX/POSIX.xs
parent58bb9ec35570407378c221c05d56adab1a48b1e6 (diff)
downloadperl-183bde56275d411115d70eb0564a586647b40e23.tar.gz
Re: [PATCH ext/POSIX/POSIX.pm] Re: sigaction.t under QNX
Message-Id: <200107061601.MAA00597@bottesini.harvard.edu> p4raw-id: //depot/perl@11191
Diffstat (limited to 'ext/POSIX/POSIX.xs')
-rw-r--r--ext/POSIX/POSIX.xs8
1 files changed, 6 insertions, 2 deletions
diff --git a/ext/POSIX/POSIX.xs b/ext/POSIX/POSIX.xs
index 1bf8521a1a..3e17039b27 100644
--- a/ext/POSIX/POSIX.xs
+++ b/ext/POSIX/POSIX.xs
@@ -522,13 +522,14 @@ __END__
}
static void
-restore_sigmask(sigset_t *ossetp)
+restore_sigmask(SV *osset_sv)
{
/* Fortunately, restoring the signal mask can't fail, because
* there's nothing we can do about it if it does -- we're not
* supposed to return -1 from sigaction unless the disposition
* was unaffected.
*/
+ sigset_t *ossetp = (sigset_t *) SvPV_nolen( osset_sv );
(void)sigprocmask(SIG_SETMASK, ossetp, (sigset_t *)0);
}
@@ -1185,6 +1186,7 @@ sigaction(sig, optaction, oldaction = 0)
struct sigaction act;
struct sigaction oact;
sigset_t sset;
+ SV *osset_sv;
sigset_t osset;
POSIX__SigSet sigset;
SV** svp;
@@ -1215,7 +1217,9 @@ sigaction(sig, optaction, oldaction = 0)
XSRETURN_UNDEF;
ENTER;
/* Restore signal mask no matter how we exit this block. */
- SAVEDESTRUCTOR(restore_sigmask, &osset);
+ osset_sv = newSVpv((char *)(&osset), sizeof(sigset_t));
+ SAVEFREESV( osset_sv );
+ SAVEDESTRUCTOR(restore_sigmask, osset_sv);
RETVAL=-1; /* In case both oldaction and action are 0. */