Fix t/base/rs.t test failures on VMS
[p5sagit/p5-mst-13.2.git] / util.c
diff --git a/util.c b/util.c
index 1ce9872..1d417e7 100644 (file)
--- a/util.c
+++ b/util.c
@@ -1062,6 +1062,7 @@ fbm_instr(unsigned char *big, register unsigned char *bigend, SV *littlestr, U32
 char *
 screaminstr(SV *bigstr, SV *littlestr, I32 start_shift, I32 end_shift, I32 *old_posp, I32 last)
 {
+    dTHR;
     register unsigned char *s, *x;
     register unsigned char *big;
     register I32 pos;
@@ -1289,7 +1290,7 @@ die(const char* pat, ...)
                msg = ERRSV;
            }
 
-           PUSHSTACKi(SI_DIEHOOK);
+           PUSHSTACKi(PERLSI_DIEHOOK);
            PUSHMARK(SP);
            XPUSHs(msg);
            PUTBACK;
@@ -1343,7 +1344,7 @@ croak(const char* pat, ...)
            SvREADONLY_on(msg);
            SAVEFREESV(msg);
 
-           PUSHSTACKi(SI_DIEHOOK);
+           PUSHSTACKi(PERLSI_DIEHOOK);
            PUSHMARK(SP);
            XPUSHs(msg);
            PUTBACK;
@@ -1392,7 +1393,7 @@ warn(const char* pat,...)
            SvREADONLY_on(msg);
            SAVEFREESV(msg);
 
-           PUSHSTACKi(SI_WARNHOOK);
+           PUSHSTACKi(PERLSI_WARNHOOK);
            PUSHMARK(SP);
            XPUSHs(msg);
            PUTBACK;
@@ -1957,6 +1958,10 @@ rsignal(int signo, Sighandler_t handler)
 #ifdef SA_RESTART
     act.sa_flags |= SA_RESTART;        /* SVR4, 4.3+BSD */
 #endif
+#ifdef SA_NOCLDWAIT
+    if (signo == SIGCHLD && handler == (Sighandler_t)SIG_IGN)
+       act.sa_flags |= SA_NOCLDWAIT;
+#endif
     if (sigaction(signo, &act, &oact) == -1)
        return SIG_ERR;
     else
@@ -1985,6 +1990,10 @@ rsignal_save(int signo, Sighandler_t handler, Sigsave_t *save)
 #ifdef SA_RESTART
     act.sa_flags |= SA_RESTART;        /* SVR4, 4.3+BSD */
 #endif
+#ifdef SA_NOCLDWAIT
+    if (signo == SIGCHLD && handler == (Sighandler_t)SIG_IGN)
+       act.sa_flags |= SA_NOCLDWAIT;
+#endif
     return sigaction(signo, &act, save);
 }
 
@@ -2783,6 +2792,17 @@ new_struct_thread(struct perl_thread *t)
     formtarget = newSVsv(t->Tformtarget);
     bodytarget = newSVsv(t->Tbodytarget);
     toptarget = newSVsv(t->Ttoptarget);
+
+    statname = NEWSV(66,0);
+    maxscream = -1;
+    regcompp = FUNC_NAME_TO_PTR(pregcomp);
+    regexecp = FUNC_NAME_TO_PTR(regexec_flags);
+    regindent = 0;
+    reginterp_cnt = 0;
+    lastscream = Nullsv;
+    screamfirst = 0;
+    screamnext = 0;
+    reg_start_tmp = 0;
     
     /* Initialise all per-thread SVs that the template thread used */
     svp = AvARRAY(t->threadsv);