* 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:
parent
04243e461d
commit
a345dc55f9
|
@ -1,3 +1,16 @@
|
|||
2012-01-08 Christopher Faylor <me.cygwin2011@cgf.cx>
|
||||
|
||||
* 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.
|
||||
|
||||
2012-01-06 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
|
||||
|
||||
* cygwin.din (pthread_sigqueue): Export.
|
||||
|
|
|
@ -149,14 +149,10 @@ dtable::get_debugger_info ()
|
|||
void
|
||||
dtable::stdio_init ()
|
||||
{
|
||||
/* Set these before trying to output anything from strace.
|
||||
Also, always set them even if we're to pick up our parent's fds
|
||||
in case they're missed. */
|
||||
|
||||
if (myself->cygstarted || ISSTATE (myself, PID_CYGPARENT))
|
||||
{
|
||||
tty_min *t = cygwin_shared->tty.get_cttyp ();
|
||||
if (t && t->getpgid () == myself->pid && t->is_console)
|
||||
if (t && t->is_console)
|
||||
init_console_handler (true);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -62,7 +62,7 @@ fhandler_termios::tcinit (bool is_pty_master)
|
|||
int
|
||||
fhandler_termios::tcsetpgrp (const pid_t pgid)
|
||||
{
|
||||
termios_printf ("tty %d pgid %d, sid %d, tsid %d", tc ()->ntty, pgid,
|
||||
termios_printf ("%s, pgid %d, sid %d, tsid %d", tc ()->ttyname (), pgid,
|
||||
myself->sid, tc ()->getsid ());
|
||||
if (myself->sid != tc ()->getsid ())
|
||||
{
|
||||
|
@ -168,8 +168,8 @@ fhandler_termios::bg_check (int sig)
|
|||
if (sig < 0)
|
||||
sig = -sig;
|
||||
|
||||
termios_printf ("bg I/O pgid %d, tpgid %d, %s, ntty %s", myself->pgid, tc ()->getpgid (),
|
||||
myctty (), tc ()->ttyname ());
|
||||
termios_printf ("%s, bg I/O pgid %d, tpgid %d, myctty %s", tc ()->ttyname (),
|
||||
myself->pgid, tc ()->getpgid (), myctty ());
|
||||
|
||||
if (tc ()->getsid () == 0)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -269,7 +269,7 @@ do_cleanup (void *args)
|
|||
# undef cleanup
|
||||
}
|
||||
|
||||
NO_COPY child_info_spawn ch_spawn;
|
||||
child_info_spawn NO_COPY ch_spawn;
|
||||
|
||||
int
|
||||
child_info_spawn::worker (const char *prog_arg, const char *const *argv,
|
||||
|
|
Loading…
Reference in New Issue