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.

Reply via email to