From: Norton T. Allen Date: Fri, 6 Jul 2001 12:01:14 +0000 (-0400) Subject: Re: [PATCH ext/POSIX/POSIX.pm] Re: sigaction.t under QNX X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=183bde56275d411115d70eb0564a586647b40e23;p=p5sagit%2Fp5-mst-13.2.git Re: [PATCH ext/POSIX/POSIX.pm] Re: sigaction.t under QNX Message-Id: <200107061601.MAA00597@bottesini.harvard.edu> p4raw-id: //depot/perl@11191 --- diff --git a/ext/POSIX/POSIX.xs b/ext/POSIX/POSIX.xs index 1bf8521..3e17039 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. */