* pinfo.h (pinfo::reattach): Only set destroy to false when proc_subproc
succeeds. Return true for success. * sigproc.cc (child_info_spawn::reattach_children): Try harder to clean up on error by detecting reattach failures too.
This commit is contained in:
		| @@ -1,3 +1,10 @@ | ||||
| 2011-11-04  Christopher Faylor  <me.cygwin2011@cgf.cx> | ||||
|  | ||||
| 	* pinfo.h (pinfo::reattach): Only set destroy to false when | ||||
| 	proc_subproc succeeds.  Return true for success. | ||||
| 	* sigproc.cc (child_info_spawn::reattach_children): Try harder to clean | ||||
| 	up on error by detecting reattach failures too. | ||||
|  | ||||
| 2011-11-04  Christopher Faylor  <me.cygwin2011@cgf.cx> | ||||
|  | ||||
| 	* sigproc.cc (child_info_spawn::reattach_children): Clean up handle | ||||
|   | ||||
| @@ -175,10 +175,11 @@ public: | ||||
| #ifndef _SIGPROC_H | ||||
|   int remember () {system_printf ("remember is not here"); return 0;} | ||||
| #else | ||||
|   void reattach () | ||||
|   int reattach () | ||||
|   { | ||||
|     proc_subproc (PROC_REATTACH_CHILD, (DWORD) this); | ||||
|     destroy = false; | ||||
|     int res = proc_subproc (PROC_REATTACH_CHILD, (DWORD) this); | ||||
|     destroy = res ? false : true; | ||||
|     return res; | ||||
|   } | ||||
|   int remember (bool detach) | ||||
|   { | ||||
|   | ||||
| @@ -866,10 +866,13 @@ child_info_spawn::reattach_children () | ||||
| 				false, DUPLICATE_SAME_ACCESS)) | ||||
| 	debug_printf ("couldn't duplicate parent %p handles for forked children after exec, %E", | ||||
| 		       children[i].rd_proc_pipe); | ||||
|       else if ((p.hProcess = OpenProcess (PROCESS_QUERY_INFORMATION, false, p->pid))) | ||||
| 	p.reattach (); | ||||
|       else | ||||
|       else if (!(p.hProcess = OpenProcess (PROCESS_QUERY_INFORMATION, false, p->pid))) | ||||
| 	CloseHandle (p.rd_proc_pipe); | ||||
|       else if (!p.reattach ()) | ||||
| 	{ | ||||
| 	  CloseHandle (p.hProcess); | ||||
| 	  CloseHandle (p.rd_proc_pipe); | ||||
| 	} | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user