check that the number pseudo children doesn't exceed
Gurusamy Sarathy [Wed, 16 Aug 2000 23:46:57 +0000 (23:46 +0000)]
MAXIMUM_WAIT_OBJECTS, which is currently 64 (avoids overflowing
the WaitForMultipleObjects() limit that would cause wait()
to crash)

wait() and waitpid() could potentially be rewritten to use
more than one thread to do the waiting to eliminate this
limitation

p4raw-id: //depot/perl@6656

win32/perlhost.h

index ea0d31d..3b1d8ca 100644 (file)
@@ -1746,7 +1746,13 @@ PerlProcFork(struct IPerlProc* piPerl)
 #ifdef USE_ITHREADS
     DWORD id;
     HANDLE handle;
-    CPerlHost *h = new CPerlHost(*(CPerlHost*)w32_internal_host);
+    CPerlHost *h;
+
+    if (w32_num_pseudo_children >= MAXIMUM_WAIT_OBJECTS) {
+       errno = EAGAIN;
+       return -1;
+    }
+    h = new CPerlHost(*(CPerlHost*)w32_internal_host);
     PerlInterpreter *new_perl = perl_clone_using((PerlInterpreter*)aTHXo, 1,
                                                 h->m_pHostperlMem,
                                                 h->m_pHostperlMemShared,