* 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:
parent
705d704153
commit
26601df44c
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user