* fork.cc (fork_parent): Return EAGAIN when can't record pid.
* pinfo.h (pinfo::remember): Return value of call to proc_subproc. * sigproc.cc (proc_subproc): Return error if can't record pid.
This commit is contained in:
parent
1e667f61b7
commit
cde0c2fbca
|
@ -1,3 +1,9 @@
|
|||
Fri Feb 9 23:19:01 2001 Christopher Faylor <cgf@cygnus.com>
|
||||
|
||||
* fork.cc (fork_parent): Return EAGAIN when can't record pid.
|
||||
* pinfo.h (pinfo::remember): Return value of call to proc_subproc.
|
||||
* sigproc.cc (proc_subproc): Return error if can't record pid.
|
||||
|
||||
Fri Feb 9 12:17:27 2001 Christopher Faylor <cgf@cygnus.com>
|
||||
|
||||
* syscalls.cc (mknod): Add valid parameters.
|
||||
|
|
|
@ -514,13 +514,24 @@ out:
|
|||
be called in subproc handling. */
|
||||
ProtectHandle1 (pi.hProcess, childhProc);
|
||||
|
||||
slow_pid_reuse (pi.hProcess);
|
||||
|
||||
/* Fill in fields in the child's process table entry. */
|
||||
forked->hProcess = pi.hProcess;
|
||||
forked->dwProcessId = pi.dwProcessId;
|
||||
forked->copysigs(myself);
|
||||
forked.remember ();
|
||||
|
||||
/* Hopefully, this will succeed. The alternative to doing things this
|
||||
way is to reserve space prior to calling CreateProcess and then fill
|
||||
it in afterwards. This requires more bookkeeping than I like, though,
|
||||
so we'll just do it the easy way. So, terminate any child process if
|
||||
we can't actually record the pid in the internal table. */
|
||||
if (!forked.remember ())
|
||||
{
|
||||
TerminateProcess (pi.hProcess, 1);
|
||||
set_errno (EAGAIN);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
slow_pid_reuse (pi.hProcess);
|
||||
|
||||
/* Wait for subproc to initialize itself. */
|
||||
if (!sync_with_child(pi, subproc_ready, TRUE, "waiting for longjmp"))
|
||||
|
|
|
@ -18,7 +18,7 @@ enum
|
|||
__SIGOFFSET = 3
|
||||
};
|
||||
|
||||
#define PSIZE 1024
|
||||
#define PSIZE 63
|
||||
|
||||
#include <sys/resource.h>
|
||||
#include "thread.h"
|
||||
|
@ -152,7 +152,7 @@ public:
|
|||
_pinfo *operator * () const {return procinfo;}
|
||||
operator _pinfo * () const {return procinfo;}
|
||||
// operator bool () const {return (int) h;}
|
||||
void remember () {destroy = 0; proc_subproc (PROC_ADDCHILD, (DWORD) this);}
|
||||
int remember () {destroy = 0; return proc_subproc (PROC_ADDCHILD, (DWORD) this);}
|
||||
HANDLE shared_handle () {return h;}
|
||||
};
|
||||
|
||||
|
|
|
@ -246,7 +246,10 @@ proc_subproc (DWORD what, DWORD val)
|
|||
*/
|
||||
case PROC_ADDCHILD:
|
||||
if (nchildren >= PSIZE - 1)
|
||||
system_printf ("nchildren too large %d", nchildren);
|
||||
{
|
||||
rc = 0;
|
||||
break;
|
||||
}
|
||||
pchildren[nchildren] = vchild;
|
||||
hchildren[nchildren] = vchild->hProcess;
|
||||
if (!DuplicateHandle (hMainProc, vchild->hProcess, hMainProc, &vchild->pid_handle,
|
||||
|
|
Loading…
Reference in New Issue