OSDN Git Service

* dtable.cc (dtable::stdio_init): Always initialize console when we have one.
[pf3gnuchains/pf3gnuchains4x.git] / winsup / cygwin / pinfo.cc
index 7affe41..65640b2 100644 (file)
@@ -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;