* 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:
		| @@ -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, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user