* dtable.cc (set_std_handle): Call SetStdHandle with NULL if fd is closed.

(dtable::release): "Close" standard handle if appropriate.
* dcrt0.cc (dll_crt0_0): Fix minor switch formatting problem.
* fork.cc (frok::parent): Make minor comment indentation change.
This commit is contained in:
Christopher Faylor 2012-03-20 23:13:40 +00:00
parent c1c62a1368
commit 30fa154939
4 changed files with 25 additions and 14 deletions

View File

@ -1,3 +1,11 @@
2012-03-20 Christopher Faylor <me.cygwin2012@cgf.cx>
* dtable.cc (set_std_handle): Call SetStdHandle with NULL if fd is
closed.
(dtable::release): "Close" standard handle if appropriate.
* dcrt0.cc (dll_crt0_0): Fix minor switch formatting problem.
* fork.cc (frok::parent): Make minor comment indentation change.
2012-03-20 Corinna Vinschen <corinna@vinschen.de> 2012-03-20 Corinna Vinschen <corinna@vinschen.de>
* syscalls.cc (lseek): Fix debug output. * syscalls.cc (lseek): Fix debug output.

View File

@ -744,13 +744,13 @@ dll_crt0_0 ()
cygwin_user_h = child_proc_info->user_h; cygwin_user_h = child_proc_info->user_h;
switch (child_proc_info->type) switch (child_proc_info->type)
{ {
case _CH_FORK: case _CH_FORK:
fork_info->handle_fork (); fork_info->handle_fork ();
break; break;
case _CH_SPAWN: case _CH_SPAWN:
case _CH_EXEC: case _CH_EXEC:
spawn_info->handle_spawn (); spawn_info->handle_spawn ();
break; break;
} }
} }

View File

@ -65,10 +65,11 @@ dtable_init ()
void __stdcall void __stdcall
set_std_handle (int fd) set_std_handle (int fd)
{ {
fhandler_base *fh = cygheap->fdtab[fd];
if (fd == 0) if (fd == 0)
SetStdHandle (std_consts[fd], cygheap->fdtab[fd]->get_handle ()); SetStdHandle (std_consts[fd], fh ? fh->get_handle () : NULL);
else if (fd <= 2) else if (fd <= 2)
SetStdHandle (std_consts[fd], cygheap->fdtab[fd]->get_output_handle ()); SetStdHandle (std_consts[fd], fh ? fh->get_output_handle () : NULL);
} }
int int
@ -244,6 +245,8 @@ dtable::release (int fd)
dec_need_fixup_before (); dec_need_fixup_before ();
fds[fd]->refcnt (-1); fds[fd]->refcnt (-1);
fds[fd] = NULL; fds[fd] = NULL;
if (fd <= 2)
set_std_handle (fd);
} }
extern "C" int extern "C" int

View File

@ -354,14 +354,14 @@ frok::parent (volatile char * volatile stack_here)
while (1) while (1)
{ {
hchild = NULL; hchild = NULL;
rc = CreateProcessW (myself->progname, /* image to run */ rc = CreateProcessW (myself->progname, /* image to run */
myself->progname, /* what we send in arg0 */ myself->progname, /* what we send in arg0 */
&sec_none_nih, &sec_none_nih,
&sec_none_nih, &sec_none_nih,
TRUE, /* inherit handles from parent */ TRUE, /* inherit handles from parent */
c_flags, c_flags,
NULL, /* environment filled in later */ NULL, /* environment filled in later */
0, /* use current drive/directory */ 0, /* use current drive/directory */
&si, &si,
&pi); &pi);