diff options
Diffstat (limited to 'winsup/cygwin/fhandler.cc')
-rw-r--r-- | winsup/cygwin/fhandler.cc | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc index 0aad893a3..d5619bd63 100644 --- a/winsup/cygwin/fhandler.cc +++ b/winsup/cygwin/fhandler.cc @@ -1044,6 +1044,7 @@ fhandler_base::dup (fhandler_base *child) return -1; } + VerifyHandle (nh); child->set_io_handle (nh); } return 0; @@ -1209,17 +1210,17 @@ fhandler_dev_null::dump (void) void fhandler_base::set_inheritance (HANDLE &h, int not_inheriting) { -#ifdef DEBUGGING_AND_FDS_PROTECTED HANDLE oh = h; -#endif /* Note that we could use SetHandleInformation here but it is not available on all platforms. Test cases seem to indicate that using DuplicateHandle in this fashion does not actually close the original handle, which is what we want. If this changes in the future, we may be forced to use SetHandleInformation on newer OS's */ - if (!DuplicateHandle (hMainProc, h, hMainProc, &h, 0, !not_inheriting, + if (!DuplicateHandle (hMainProc, oh, hMainProc, &h, 0, !not_inheriting, DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE)) debug_printf ("DuplicateHandle failed, %E"); + if (oh != h) + VerifyHandle (h); #ifdef DEBUGGING_AND_FDS_PROTECTED if (h) setclexec (oh, h, not_inheriting); @@ -1229,17 +1230,14 @@ fhandler_base::set_inheritance (HANDLE &h, int not_inheriting) void fhandler_base::fork_fixup (HANDLE parent, HANDLE &h, const char *name) { + HANDLE oh = h; if (/* !is_socket () && */ !get_close_on_exec ()) debug_printf ("handle %p already opened", h); else if (!DuplicateHandle (parent, h, hMainProc, &h, 0, !get_close_on_exec (), DUPLICATE_SAME_ACCESS)) system_printf ("%s - %E, handle %s<%p>", get_name (), name, h); -#ifdef DEBUGGING_AND_FDS_PROTECTED - else if (get_close_on_exec ()) - ProtectHandle (h); /* would have to be fancier than this */ - else - /* ProtectHandleINH (h) */; /* Should already be protected */ -#endif + else if (oh != h) + VerifyHandle (h); } void |