Change 29577 by [EMAIL PROTECTED] on 2006/12/18 10:49:15
Subject: [PATCH 5.8.8] OS/2: survive SIGCHLD
From: Ilya Zakharevich <[EMAIL PROTECTED]>
Date: Mon, 18 Dec 2006 00:55:19 -0800
Message-ID: <[EMAIL PROTECTED]>
plus a perldiag entry for the new error,
"Maximal count of pending signals (%s) exceeded"
Affected files ...
... //depot/perl/mg.c#467 edit
... //depot/perl/pod/perldiag.pod#463 edit
Differences ...
==== //depot/perl/mg.c#467 (text) ====
Index: perl/mg.c
--- perl/mg.c#466~29565~ 2006-12-16 08:54:06.000000000 -0800
+++ perl/mg.c 2006-12-18 02:49:15.000000000 -0800
@@ -1290,6 +1290,10 @@
return 0;
}
+#ifndef SIG_PENDING_DIE_COUNT
+# define SIG_PENDING_DIE_COUNT 120
+#endif
+
static void
S_raise_signal(pTHX_ int sig)
{
@@ -1297,7 +1301,9 @@
/* Set a flag to say this signal is pending */
PL_psig_pend[sig]++;
/* And one to say _a_ signal is pending */
- PL_sig_pending = 1;
+ if (++PL_sig_pending >= SIG_PENDING_DIE_COUNT)
+ Perl_croak(aTHX_ "Maximal count of pending signals (%lu) exceeded",
+ (unsigned long)SIG_PENDING_DIE_COUNT);
}
Signal_t
==== //depot/perl/pod/perldiag.pod#463 (text) ====
Index: perl/pod/perldiag.pod
--- perl/pod/perldiag.pod#462~29445~ 2006-12-04 01:21:16.000000000 -0800
+++ perl/pod/perldiag.pod 2006-12-18 02:49:15.000000000 -0800
@@ -2285,6 +2285,14 @@
(F) You tried to unpack something that didn't comply with UTF-8 encoding
rules and perl was unable to guess how to make more progress.
+=item Maximal count of pending signals (%s) exceeded
+
+(F) Perl aborted due to a too important number of signals pending. This
+usually indicates that your operating system tried to deliver signals
+too fast (with a very high priority), starving the perl process from
+resources it would need to reach a point where it can process signals
+safely. (See L<perlipc/"Deferred Signals (Safe Signals)">.)
+
=item %s matches null string many times in regex; marked by <-- HERE in m/%s/
(W regexp) The pattern you've specified would be an infinite loop if the
End of Patch.