* fhandler_tty.cc (fhandler_pty_master::close): Don't close handles if we don't
own them. (fhandler_pty_master::setup): Make sure that original handle is closed when changing inheritance. (fhandler_pty_master::fixup_after_fork): Set from_master/to_master to arch value always. (fhandler_pty_master::fixup_after_exec): Clear from_master/to_master when close_on_exec.
This commit is contained in:
		| @@ -1,3 +1,14 @@ | ||||
| 2006-06-03  Christopher Faylor  <cgf@timesys.com> | ||||
|  | ||||
| 	* fhandler_tty.cc (fhandler_pty_master::close): Don't close handles if | ||||
| 	we don't own them. | ||||
| 	(fhandler_pty_master::setup): Make sure that original handle is closed | ||||
| 	when changing inheritance. | ||||
| 	(fhandler_pty_master::fixup_after_fork): Set from_master/to_master to | ||||
| 	arch value always. | ||||
| 	(fhandler_pty_master::fixup_after_exec): Clear from_master/to_master | ||||
| 	when close_on_exec. | ||||
|  | ||||
| 2006-06-03  Christopher Faylor  <cgf@timesys.com> | ||||
|  | ||||
| 	* cygheap.cc (init_cygheap::close_ctty): Remove obsolete code. | ||||
|   | ||||
| @@ -1170,10 +1170,18 @@ fhandler_pty_master::close () | ||||
|     } | ||||
|  | ||||
|   fhandler_tty_master *arch = (fhandler_tty_master *) archetype; | ||||
|   if (!ForceCloseHandle (arch->from_master)) | ||||
|     termios_printf ("error closing from_master %p, %E", arch->from_master); | ||||
|   if (!ForceCloseHandle (arch->to_master)) | ||||
|     termios_printf ("error closing from_master %p, %E", arch->to_master); | ||||
|   if (arch->dwProcessId != GetCurrentProcessId ()) | ||||
|     termios_printf ("not closing from_master(%p)/to_master(%p) since we don't own them(%d)", | ||||
| 		    arch->from_master, arch->to_master, arch->dwProcessId); | ||||
|   else | ||||
|     { | ||||
|       termios_printf ("closing from_master(%p)/to_master(%p) since we own them(%d)", | ||||
| 		      arch->from_master, arch->to_master, arch->dwProcessId); | ||||
|       if (!ForceCloseHandle (arch->from_master)) | ||||
| 	termios_printf ("error closing from_master %p, %E", arch->from_master); | ||||
|       if (!ForceCloseHandle (arch->to_master)) | ||||
| 	termios_printf ("error closing from_master %p, %E", arch->to_master); | ||||
|     } | ||||
|   fhandler_tty_common::close (); | ||||
|  | ||||
|   if (!hExeced && get_ttyp ()->master_pid == myself->pid) | ||||
| @@ -1390,14 +1398,14 @@ fhandler_pty_master::setup (tty& t) | ||||
|     goto err; | ||||
|  | ||||
|   if (!DuplicateHandle (hMainProc, from_master, hMainProc, &from_master, 0, false, | ||||
| 			DUPLICATE_SAME_ACCESS)) | ||||
| 			DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE)) | ||||
|     { | ||||
|       errstr = "non-inheritable from_master"; | ||||
|       goto err; | ||||
|     } | ||||
|  | ||||
|   if (!DuplicateHandle (hMainProc, to_master, hMainProc, &to_master, 0, false, | ||||
| 			DUPLICATE_SAME_ACCESS)) | ||||
| 			DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE)) | ||||
|     { | ||||
|       errstr = "non-inheritable to_master"; | ||||
|       goto err; | ||||
| @@ -1452,6 +1460,8 @@ fhandler_pty_master::fixup_after_fork (HANDLE parent) | ||||
| 	} | ||||
|       arch->dwProcessId = wpid; | ||||
|     } | ||||
|   from_master = arch->from_master; | ||||
|   to_master = arch->to_master; | ||||
|   report_tty_counts (this, "inherited master", ""); | ||||
| } | ||||
|  | ||||
| @@ -1460,4 +1470,6 @@ fhandler_pty_master::fixup_after_exec () | ||||
| { | ||||
|   if (!close_on_exec ()) | ||||
|     fixup_after_fork (spawn_info->parent); | ||||
|   else | ||||
|     from_master = to_master = NULL; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user