aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2012-01-08 06:24:17 +0000
committerChristopher Faylor <me@cgf.cx>2012-01-08 06:24:17 +0000
commita345dc55f9d6ea302ec7bfbb0bda96cf20da80dd (patch)
tree93fe4f45e9ab80c5e2612a3ef963377cadbe8abc
parent04243e461d1101477a2b0de259529b1e9249f917 (diff)
downloadnewlib-a345dc55f9d6ea302ec7bfbb0bda96cf20da80dd.zip
newlib-a345dc55f9d6ea302ec7bfbb0bda96cf20da80dd.tar.gz
newlib-a345dc55f9d6ea302ec7bfbb0bda96cf20da80dd.tar.bz2
* 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.
-rw-r--r--winsup/cygwin/ChangeLog13
-rw-r--r--winsup/cygwin/dtable.cc6
-rw-r--r--winsup/cygwin/fhandler_termios.cc6
-rw-r--r--winsup/cygwin/pinfo.cc38
-rw-r--r--winsup/cygwin/spawn.cc2
5 files changed, 32 insertions, 33 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 8744cc8..9948fec 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -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.
diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc
index 05becaa..361010e 100644
--- a/winsup/cygwin/dtable.cc
+++ b/winsup/cygwin/dtable.cc
@@ -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;
}
diff --git a/winsup/cygwin/fhandler_termios.cc b/winsup/cygwin/fhandler_termios.cc
index fca180d..c218fde 100644
--- a/winsup/cygwin/fhandler_termios.cc
+++ b/winsup/cygwin/fhandler_termios.cc
@@ -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)
{
diff --git a/winsup/cygwin/pinfo.cc b/winsup/cygwin/pinfo.cc
index 7affe41..65640b2 100644
--- a/winsup/cygwin/pinfo.cc
+++ b/winsup/cygwin/pinfo.cc
@@ -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;
diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc
index 8a5a939..1bf2d1d 100644
--- a/winsup/cygwin/spawn.cc
+++ b/winsup/cygwin/spawn.cc
@@ -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,