* dtable.cc (dtable::stdio_init): Always initialize console when we have one.
* fhandler_termios.cc (fhandler_termios::tcsetpgrp): Use a better method to print tty name for debugging. (fhandler_termios::bg_check): Ditto. * pinfo.cc (_pinfo::set_ctty): Remove leftover debugging stuff. Simplify behavior when setting tty's sid and pgid to avoid overwriting previously set values. * spawn.cc (ch_spawn): Cosmetic change.
This commit is contained in:
@@ -433,9 +433,6 @@ _pinfo::_ctty (char *buf)
|
||||
bool
|
||||
_pinfo::set_ctty (fhandler_termios *fh, int flags)
|
||||
{
|
||||
debug_printf ("fh %p", fh);
|
||||
debug_printf ("tc %p", fh->tc ());
|
||||
if (!this || !fh->tc ()) try_to_debug ();
|
||||
tty_min& tc = *fh->tc ();
|
||||
debug_printf ("old %s, ctty device number %p, tc.ntty device number %p flags & O_NOCTTY %p", __ctty (), ctty, tc.ntty, flags & O_NOCTTY);
|
||||
if (fh && &tc && (ctty <= 0 || ctty == tc.ntty) && !(flags & O_NOCTTY))
|
||||
@@ -466,30 +463,23 @@ if (!this || !fh->tc ()) try_to_debug ();
|
||||
syscall_printf ("attaching %s sid %d, pid %d, pgid %d, tty->pgid %d, tty->sid %d",
|
||||
__ctty (), sid, pid, pgid, tc.getpgid (), tc.getsid ());
|
||||
if (!cygwin_finished_initializing && !myself->cygstarted
|
||||
&& myself->pgid == myself->pid && tc.getpgid () && tc.getsid ())
|
||||
&& pgid == pid && tc.getpgid () && tc.getsid ())
|
||||
{
|
||||
myself->pgid = tc.getpgid ();
|
||||
myself->sid = tc.getsid ();
|
||||
pgid = tc.getpgid ();
|
||||
}
|
||||
|
||||
pinfo p (tc.getsid ());
|
||||
if (sid == pid && (!p || p->pid == pid || !p->exists ()))
|
||||
{
|
||||
#ifdef DEBUGGING
|
||||
debug_printf ("resetting %s sid. Was %d, now %d. pgid was %d, now %d.",
|
||||
__ctty (), tc.getsid (), sid, tc.getpgid (), pgid);
|
||||
#else
|
||||
paranoid_printf ("resetting %s sid. Was %d, now %d. pgid was %d, now %d.",
|
||||
__ctty (), tc.getsid (), sid, tc.getpgid (), pgid);
|
||||
#endif
|
||||
/* We are the session leader */
|
||||
tc.setsid (sid);
|
||||
tc.setpgid (pgid);
|
||||
}
|
||||
else
|
||||
sid = tc.getsid ();
|
||||
if (tc.getpgid () == 0)
|
||||
tc.setpgid (pgid);
|
||||
/* May actually need to do this:
|
||||
|
||||
if (sid == pid && !tc.getsid () || !procinfo (tc.getsid ())->exists)
|
||||
|
||||
but testing for process existence is expensive so we avoid it until
|
||||
an obvious bug surfaces. */
|
||||
if (sid == pid && !tc.getsid ())
|
||||
tc.setsid (sid);
|
||||
sid = tc.getsid ();
|
||||
/* See above */
|
||||
if (!tc.getpgid () && pgid == pid)
|
||||
tc.setpgid (pgid);
|
||||
}
|
||||
debug_printf ("cygheap->ctty now %p, archetype %p", cygheap->ctty, fh->archetype);
|
||||
return ctty > 0;
|
||||
|
Reference in New Issue
Block a user