Change 20565 by [EMAIL PROTECTED] on 2003/08/08 18:59:40
Move the csighandler to be a data variable so that
things like DLL trampolines can't mess up the code
variables the Perl_csighandler (seen in Cygwin:
Perl_csighandler in POSIX extension was different
than in main executable).
Affected files ...
... //depot/perl/embedvar.h#180 edit
... //depot/perl/ext/POSIX/POSIX.xs#116 edit
... //depot/perl/mg.c#272 edit
... //depot/perl/perlapi.h#102 edit
... //depot/perl/perlvars.h#57 edit
Differences ...
==== //depot/perl/embedvar.h#180 (text+w) ====
Index: perl/embedvar.h
--- perl/embedvar.h#179~20263~ Mon Jul 28 05:13:24 2003
+++ perl/embedvar.h Fri Aug 8 11:59:40 2003
@@ -896,6 +896,7 @@
#define PL_No (PL_Vars.GNo)
#define PL_Yes (PL_Vars.GYes)
+#define PL_csighandlerp (PL_Vars.Gcsighandlerp)
#define PL_curinterp (PL_Vars.Gcurinterp)
#define PL_do_undump (PL_Vars.Gdo_undump)
#define PL_dollarzero_mutex (PL_Vars.Gdollarzero_mutex)
@@ -912,6 +913,7 @@
#define PL_GNo PL_No
#define PL_GYes PL_Yes
+#define PL_Gcsighandlerp PL_csighandlerp
#define PL_Gcurinterp PL_curinterp
#define PL_Gdo_undump PL_do_undump
#define PL_Gdollarzero_mutex PL_dollarzero_mutex
==== //depot/perl/ext/POSIX/POSIX.xs#116 (text) ====
Index: perl/ext/POSIX/POSIX.xs
--- perl/ext/POSIX/POSIX.xs#115~20081~ Tue Jul 8 22:53:56 2003
+++ perl/ext/POSIX/POSIX.xs Fri Aug 8 11:59:40 2003
@@ -1293,7 +1293,7 @@
/* Get back whether the old handler used safe signals. */
svp = hv_fetch(oldaction, "SAFE", 4, TRUE);
- sv_setiv(*svp, oact.sa_handler == Perl_csighandler);
+ sv_setiv(*svp, oact.sa_handler == PL_csighandlerp);
}
if (action) {
==== //depot/perl/mg.c#272 (text) ====
Index: perl/mg.c
--- perl/mg.c#271~20068~ Tue Jul 8 01:36:27 2003
+++ perl/mg.c Fri Aug 8 11:59:40 2003
@@ -1144,7 +1144,7 @@
#endif
#ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
sig_defaulting[i] = 1;
- (void)rsignal(i, &Perl_csighandler);
+ (void)rsignal(i, PL_csighandlerp);
#else
(void)rsignal(i, SIG_DFL);
#endif
@@ -1183,7 +1183,7 @@
dTHX;
#endif
#ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
- (void) rsignal(sig, &Perl_csighandler);
+ (void) rsignal(sig, PL_csighandlerp);
if (sig_ignoring[sig]) return;
#endif
#ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
@@ -1213,7 +1213,7 @@
#ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
dTHX;
sig_defaulting[sig] = 1;
- (void) rsignal(sig, &Perl_csighandler);
+ (void) rsignal(sig, PL_csighandlerp);
#endif
#ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
sig_ignoring[sig] = 0;
@@ -1306,7 +1306,7 @@
}
if (SvTYPE(sv) == SVt_PVGV || SvROK(sv)) {
if (i) {
- (void)rsignal(i, &Perl_csighandler);
+ (void)rsignal(i, PL_csighandlerp);
#ifdef HAS_SIGPROCMASK
LEAVE;
#endif
@@ -1322,7 +1322,7 @@
if (i) {
#ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
sig_ignoring[i] = 1;
- (void)rsignal(i, &Perl_csighandler);
+ (void)rsignal(i, PL_csighandlerp);
#else
(void)rsignal(i, SIG_IGN);
#endif
@@ -1333,7 +1333,7 @@
#ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
{
sig_defaulting[i] = 1;
- (void)rsignal(i, &Perl_csighandler);
+ (void)rsignal(i, PL_csighandlerp);
}
#else
(void)rsignal(i, SIG_DFL);
@@ -1348,7 +1348,7 @@
if (!strchr(s,':') && !strchr(s,'\''))
sv_insert(sv, 0, 0, "main::", 6);
if (i)
- (void)rsignal(i, &Perl_csighandler);
+ (void)rsignal(i, PL_csighandlerp);
else
*svp = SvREFCNT_inc(sv);
}
@@ -2518,7 +2518,7 @@
#else
/* Not clear if this will work */
(void)rsignal(sig, SIG_IGN);
- (void)rsignal(sig, &Perl_csighandler);
+ (void)rsignal(sig, PL_csighandlerp);
#endif
#endif /* !PERL_MICRO */
Perl_die(aTHX_ Nullformat);
==== //depot/perl/perlapi.h#102 (text+w) ====
Index: perl/perlapi.h
--- perl/perlapi.h#101~20263~ Mon Jul 28 05:13:24 2003
+++ perl/perlapi.h Fri Aug 8 11:59:40 2003
@@ -930,6 +930,8 @@
#define PL_No (*Perl_GNo_ptr(NULL))
#undef PL_Yes
#define PL_Yes (*Perl_GYes_ptr(NULL))
+#undef PL_csighandlerp
+#define PL_csighandlerp (*Perl_Gcsighandlerp_ptr(NULL))
#undef PL_curinterp
#define PL_curinterp (*Perl_Gcurinterp_ptr(NULL))
#undef PL_do_undump
==== //depot/perl/perlvars.h#57 (text) ====
Index: perl/perlvars.h
--- perl/perlvars.h#56~20263~ Mon Jul 28 05:13:24 2003
+++ perl/perlvars.h Fri Aug 8 11:59:40 2003
@@ -63,3 +63,5 @@
* The contents are never used, only the address. */
PERLVAR(Gsv_placeholder, SV)
+PERLVARI(Gcsighandlerp, Sighandler_t, &Perl_csighandler) /* Pointer to
C-level sighandler */
+
End of Patch.