* 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