Re: [PATCH ext/POSIX/POSIX.pm] Re: sigaction.t under QNX
Norton T. Allen [Fri, 6 Jul 2001 12:01:14 +0000 (08:01 -0400)]
Message-Id: <200107061601.MAA00597@bottesini.harvard.edu>

p4raw-id: //depot/perl@11191

ext/POSIX/POSIX.xs

index 1bf8521..3e17039 100644 (file)
@@ -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. */