* fhandler.h (fhandler_console::fixup_after_fork_exec): Declare new function.
(fhandler_console::fixup_after_fork): Use fixup_after_fork_exec. (fhandler_console::fixup_after_exec): Ditto. * fhandler_console.cc (fhandler_console::fixup_after_fork): Delete definition. (fhandler_console::fixup_after_fork_exec): Rename from fixup_after_exec. * pinfo.cc (_pinfo::set_ctty): Don't play with console count here. * syscalls.cc (close_all_files): Don't close cygheap ctty if hExeced since the child will be copying information from us. (setsid): Use myctty() rather than raw ctty #.
This commit is contained in:
parent
59297e0464
commit
5a0826c3f8
|
@ -1,3 +1,15 @@
|
|||
2005-11-14 Christopher Faylor <cgf@timesys.com>
|
||||
|
||||
* fhandler.h (fhandler_console::fixup_after_fork_exec): Declare new function.
|
||||
(fhandler_console::fixup_after_fork): Use fixup_after_fork_exec.
|
||||
(fhandler_console::fixup_after_exec): Ditto.
|
||||
* fhandler_console.cc (fhandler_console::fixup_after_fork): Delete definition.
|
||||
(fhandler_console::fixup_after_fork_exec): Rename from fixup_after_exec.
|
||||
* pinfo.cc (_pinfo::set_ctty): Don't play with console count here.
|
||||
* syscalls.cc (close_all_files): Don't close cygheap ctty if hExeced
|
||||
since the child will be copying information from us.
|
||||
(setsid): Use myctty() rather than raw ctty #.
|
||||
|
||||
2005-11-13 Christopher Faylor <cgf@timesys.com>
|
||||
|
||||
* cygheap.h (init_cygheap::manage_console_count): Declare new function.
|
||||
|
|
|
@ -909,9 +909,10 @@ class fhandler_console: public fhandler_termios
|
|||
select_record *select_read (select_record *s);
|
||||
select_record *select_write (select_record *s);
|
||||
select_record *select_except (select_record *s);
|
||||
void fixup_after_exec ();
|
||||
void fixup_after_fork_exec ();
|
||||
void fixup_after_exec () {fixup_after_fork_exec ();}
|
||||
void fixup_after_fork (HANDLE) {fixup_after_fork_exec ();}
|
||||
void set_close_on_exec (bool val);
|
||||
void fixup_after_fork (HANDLE parent);
|
||||
void set_input_state ();
|
||||
void send_winch_maybe ();
|
||||
static tty_min *get_tty_stuff (int);
|
||||
|
|
|
@ -695,10 +695,7 @@ fhandler_console::close ()
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Special console dup to duplicate input and output
|
||||
* handles.
|
||||
*/
|
||||
/* Special console dup to duplicate input and output handles. */
|
||||
|
||||
int
|
||||
fhandler_console::dup (fhandler_base *child)
|
||||
|
@ -1757,29 +1754,6 @@ fhandler_console::set_close_on_exec (bool val)
|
|||
set_no_inheritance (output_handle, val);
|
||||
}
|
||||
|
||||
void
|
||||
fhandler_console::fixup_after_fork (HANDLE)
|
||||
{
|
||||
HANDLE h = get_handle ();
|
||||
HANDLE oh = get_output_handle ();
|
||||
|
||||
/* Windows does not allow duplication of console handles between processes
|
||||
so open the console explicitly. */
|
||||
|
||||
if (!open (O_NOCTTY | get_flags (), 0))
|
||||
system_printf ("error opening console after fork, %E");
|
||||
|
||||
/* Need to decrement console_count since this open is basically a no-op to reopen
|
||||
the console and we've already recorded that fact. */
|
||||
cygheap->manage_console_count ("fhandler_console::fixup_after_fork", -1);
|
||||
|
||||
if (!close_on_exec ())
|
||||
{
|
||||
CloseHandle (h);
|
||||
CloseHandle (oh);
|
||||
}
|
||||
}
|
||||
|
||||
void __stdcall
|
||||
set_console_title (char *title)
|
||||
{
|
||||
|
@ -1795,29 +1769,29 @@ set_console_title (char *title)
|
|||
}
|
||||
|
||||
void
|
||||
fhandler_console::fixup_after_exec ()
|
||||
fhandler_console::fixup_after_fork_exec ()
|
||||
{
|
||||
HANDLE h = get_handle ();
|
||||
HANDLE oh = get_output_handle ();
|
||||
|
||||
if (close_on_exec () || open (O_NOCTTY | get_flags (), 0))
|
||||
cygheap->manage_console_count ("fhandler_console::fixup_after_exec", -1);
|
||||
cygheap->manage_console_count ("fhandler_console::fixup_after_fork_exec", -1);
|
||||
else
|
||||
{
|
||||
bool sawerr = false;
|
||||
if (!get_io_handle ())
|
||||
{
|
||||
system_printf ("error opening input console handle after exec, errno %d, %E", get_errno ());
|
||||
system_printf ("error opening input console handle after fork/exec, errno %d, %E", get_errno ());
|
||||
sawerr = true;
|
||||
}
|
||||
if (!get_output_handle ())
|
||||
{
|
||||
system_printf ("error opening output console handle after exec, errno %d, %E", get_errno ());
|
||||
system_printf ("error opening output console handle after fork/exec, errno %d, %E", get_errno ());
|
||||
sawerr = true;
|
||||
}
|
||||
|
||||
if (!sawerr)
|
||||
system_printf ("error opening console after exec, errno %d, %E", get_errno ());
|
||||
system_printf ("error opening console after fork/exec, errno %d, %E", get_errno ());
|
||||
}
|
||||
|
||||
if (!close_on_exec ())
|
||||
|
|
|
@ -450,8 +450,7 @@ fhandler_tty_slave::open (int flags, mode_t)
|
|||
{
|
||||
if (get_device () == FH_TTY)
|
||||
pc.dev.tty_to_real_device ();
|
||||
fhandler_tty_slave *arch = (fhandler_tty_slave *)
|
||||
cygheap->fdtab.find_archetype (pc.dev);
|
||||
fhandler_tty_slave *arch = (fhandler_tty_slave *) cygheap->fdtab.find_archetype (pc.dev);
|
||||
if (arch)
|
||||
{
|
||||
*this = *(fhandler_tty_slave *) arch;
|
||||
|
|
|
@ -365,7 +365,6 @@ _pinfo::set_ctty (tty_min *tc, int flags, fhandler_tty_slave *arch)
|
|||
if (arch)
|
||||
{
|
||||
arch->usecount++;
|
||||
cygheap->manage_console_count ("pinfo::set_ctty", 1);
|
||||
report_tty_counts (cygheap->ctty, "ctty", "");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -114,7 +114,7 @@ close_all_files (bool norelease)
|
|||
cygheap->fdtab.release (i);
|
||||
}
|
||||
|
||||
if (cygheap->ctty)
|
||||
if (!hExeced && cygheap->ctty)
|
||||
cygheap->close_ctty ();
|
||||
|
||||
cygheap->fdtab.unlock ();
|
||||
|
@ -347,8 +347,7 @@ setsid (void)
|
|||
myself->pgid = getpid ();
|
||||
if (cygheap->ctty)
|
||||
cygheap->close_ctty ();
|
||||
syscall_printf ("sid %d, pgid %d, ctty %d", myself->sid, myself->pgid,
|
||||
myself->ctty);
|
||||
syscall_printf ("sid %d, pgid %d, %s", myself->sid, myself->pgid, myctty ());
|
||||
return myself->sid;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue