From b040009ecf27a18dc7b4d251137004f9f32120d4 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Sun, 21 May 2006 05:25:49 +0000 Subject: * debug.cc (add_handle): Print handle value when collision detected. * dtable.cc (dtable::stdio_init): Cosmetic change. * fhandler.h (fhandler_base::create_read_state): Protect handle. (fhandler_pipe::create_guard): Ditto. Always mark the handle as inheritable. (fhandler_pipe::is_slow): Return boolean value rather than numeric 1. * pipe.cc (fhandler_pipe::fhandler_pipe): Always flag that we need fork fixup. (fhandler_pipe::open): Don't pass security attributes to create_guard. (fhandler_pipe::set_close_on_exec): Don't handle guard here. (fhandler_pipe::close): Accommodate now-protected guard handle. (fhandler_pipe::fixup_in_child): Don't proected read_state here. (fhandler_pipe::fixup_after_exec): Close guard handle if close_on_exec. (fhandler_pipe::fixup_after_fork): Don't bother with guard here. (fhandler_pipe::dup): Don't set res to non-error prematurely. Use boolean values where appropriate. Protect guard and read_state. (fhandler_pipe::create): Don't call need_fork_fixup since it is now the default. Don't protect read_state or guard. * pipe.cc (fhandler_base::ready_for_read): Use bool values for "avail". * spawn.cc (spawn_guts): Set cygheap->pid_handle as inheritable when protecting. * select.cc (fhandler_pipe::ready_for_read): Actually get the guard mutex for blocking reads. --- winsup/cygwin/fhandler.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'winsup/cygwin/fhandler.h') diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h index 52e41e27a..2bd4bac5a 100644 --- a/winsup/cygwin/fhandler.h +++ b/winsup/cygwin/fhandler.h @@ -212,6 +212,7 @@ class fhandler_base void create_read_state (LONG n) { read_state = CreateSemaphore (&sec_none_nih, 0, n, NULL); + ProtectHandle (read_state); } void signal_read_state (LONG n) @@ -512,7 +513,11 @@ public: void __stdcall read (void *ptr, size_t& len) __attribute__ ((regparm (3))); int open (int flags, mode_t mode = 0); int close (); - void create_guard (SECURITY_ATTRIBUTES *sa) {guard = CreateMutex (sa, FALSE, NULL);} + void create_guard () + { + guard = CreateMutex (&sec_none, FALSE, NULL); + ProtectHandleINH (guard); + } int dup (fhandler_base *child); int ioctl (unsigned int cmd, void *); void fixup_in_child (); @@ -545,7 +550,7 @@ public: void set_output_handle (HANDLE h) { output_handle = h; } void set_use (); int dup (fhandler_base *child); - bool is_slow () {return 1;} + bool is_slow () {return true;} void close_one_end (); }; -- cgit v1.2.3