From 9fa43ff6c61626df04f9b87c09f5233ba07a608d Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Fri, 23 Feb 2007 14:47:45 +0000 Subject: [PATCH] * fhandler.h (class fhandler_pipe): Remove members writepipe_exists, orig_pid and id. Make hit_eof inline. * fhandler_fifo.cc (fhandler_fifo::open): Drop handling of writepipe_exists, orig_pid and id. * pipe.cc: Ditto throughout. (pipecount): Remove. (pipeid_fmt): Remove. (fhandler_pipe::hit_eof): Simplify. Move to fhandler.h. (fhandler_pipe::dup): Drop leave label. (fhandler_pipe::create): Drop has_unreliable_pipes case. * wincap.cc: Remove has_unreliable_pipes throughout. * wincap.h: Ditto. --- winsup/cygwin/ChangeLog | 15 +++++++ winsup/cygwin/fhandler.h | 5 +-- winsup/cygwin/fhandler_fifo.cc | 3 -- winsup/cygwin/pipe.cc | 72 ++-------------------------------- winsup/cygwin/wincap.cc | 7 ---- winsup/cygwin/wincap.h | 2 - 6 files changed, 20 insertions(+), 84 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index dfffc4a52..51346fc34 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,18 @@ +2007-02-23 Corinna Vinschen + + * fhandler.h (class fhandler_pipe): Remove members writepipe_exists, + orig_pid and id. Make hit_eof inline. + * fhandler_fifo.cc (fhandler_fifo::open): Drop handling of + writepipe_exists, orig_pid and id. + * pipe.cc: Ditto throughout. + (pipecount): Remove. + (pipeid_fmt): Remove. + (fhandler_pipe::hit_eof): Simplify. Move to fhandler.h. + (fhandler_pipe::dup): Drop leave label. + (fhandler_pipe::create): Drop has_unreliable_pipes case. + * wincap.cc: Remove has_unreliable_pipes throughout. + * wincap.h: Ditto. + 2007-02-23 Corinna Vinschen * devices.in: Change native device name to native NT device name for diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h index e3c8fd74a..112ac6ecd 100644 --- a/winsup/cygwin/fhandler.h +++ b/winsup/cygwin/fhandler.h @@ -518,9 +518,6 @@ class fhandler_pipe: public fhandler_base protected: HANDLE guard; bool broken_pipe; - HANDLE writepipe_exists; - DWORD orig_pid; - unsigned id; private: pid_t popen_pid; public: @@ -548,7 +545,7 @@ public: void fixup_in_child (); virtual void fixup_after_fork (HANDLE); void fixup_after_exec (); - bool hit_eof (); + bool hit_eof () {return broken_pipe;} void set_eof () {broken_pipe = true;} HANDLE get_guard () const {return guard;} int ready_for_read (int fd, DWORD howlong); diff --git a/winsup/cygwin/fhandler_fifo.cc b/winsup/cygwin/fhandler_fifo.cc index aa631528a..8f5e793f7 100644 --- a/winsup/cygwin/fhandler_fifo.cc +++ b/winsup/cygwin/fhandler_fifo.cc @@ -203,9 +203,6 @@ fhandler_fifo::open (int flags, mode_t) set_output_handle (fhs[1]->get_handle ()); guard = fhs[0]->guard; read_state = fhs[0]->read_state; - writepipe_exists = fhs[1]->writepipe_exists; - orig_pid = fhs[0]->orig_pid; - id = fhs[0]->id; delete (fhs[0]); delete (fhs[1]); set_use (1); diff --git a/winsup/cygwin/pipe.cc b/winsup/cygwin/pipe.cc index 99231e7f1..b53cc2f7f 100644 --- a/winsup/cygwin/pipe.cc +++ b/winsup/cygwin/pipe.cc @@ -1,7 +1,7 @@ /* pipe.cc: pipe for Cygwin. - Copyright 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Hat, Inc. + Copyright 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007 Hat, Inc. This file is part of Cygwin. @@ -27,12 +27,8 @@ details. */ #include "cygthread.h" #include "ntdll.h" -static unsigned pipecount; -static const NO_COPY char pipeid_fmt[] = "stupid_pipe.%u.%u"; - fhandler_pipe::fhandler_pipe () - : fhandler_base (), guard (NULL), broken_pipe (false), writepipe_exists (NULL), - orig_pid (0), id (0), popen_pid (0) + : fhandler_base (), guard (NULL), broken_pipe (false), popen_pid (0) { need_fork_fixup (true); } @@ -111,15 +107,6 @@ fhandler_pipe::open (int flags, mode_t mode) __seterrno (); goto out; } - if (!fh->writepipe_exists) - /* nothing to do */; - else if (!DuplicateHandle (proc, fh->writepipe_exists, - hMainProc, &writepipe_exists, - 0, inh, DUPLICATE_SAME_ACCESS)) - { - __seterrno (); - goto out; - } if (fh->read_state) create_read_state (2); init (nio_hdl, fh->get_access (), mode & O_TEXT ?: O_BINARY); @@ -130,8 +117,6 @@ fhandler_pipe::open (int flags, mode_t mode) CloseHandle (proc); return 1; out: - if (writepipe_exists) - CloseHandle (writepipe_exists); if (guard) CloseHandle (guard); if (nio_hdl) @@ -174,8 +159,6 @@ fhandler_pipe::set_close_on_exec (bool val) set_no_inheritance (guard, val); ModifyHandle (guard, !val); } - if (writepipe_exists) - set_no_inheritance (writepipe_exists, val); } char * @@ -220,8 +203,6 @@ fhandler_pipe::close () { if (guard) ForceCloseHandle (guard); - if (writepipe_exists) - CloseHandle (writepipe_exists); #ifndef NEWVFORK if (read_state) #else @@ -234,22 +215,6 @@ fhandler_pipe::close () return fhandler_base::close (); } -bool -fhandler_pipe::hit_eof () -{ - char buf[80]; - HANDLE ev; - if (broken_pipe) - return 1; - if (!orig_pid) - return false; - __small_sprintf (buf, pipeid_fmt, orig_pid, id); - if ((ev = OpenEvent (EVENT_ALL_ACCESS, FALSE, buf))) - CloseHandle (ev); - debug_printf ("%s %p", buf, ev); - return ev == NULL; -} - void fhandler_pipe::fixup_in_child () { @@ -270,8 +235,6 @@ fhandler_pipe::fixup_after_fork (HANDLE parent) fhandler_base::fixup_after_fork (parent); if (guard && fork_fixup (parent, guard, "guard")) ProtectHandle (guard); - if (writepipe_exists) - fork_fixup (parent, writepipe_exists, "writepipe_exists"); fixup_in_child (); } @@ -281,7 +244,7 @@ fhandler_pipe::dup (fhandler_base *child) int res = -1; fhandler_pipe *ftp = (fhandler_pipe *) child; ftp->set_popen_pid (0); - ftp->guard = ftp->writepipe_exists = ftp->read_state = NULL; + ftp->guard = ftp->read_state = NULL; if (get_handle () && fhandler_base::dup (child)) goto err; @@ -297,16 +260,6 @@ fhandler_pipe::dup (fhandler_base *child) goto err; } - if (!writepipe_exists) - /* nothing to do */; - else if (!DuplicateHandle (hMainProc, writepipe_exists, hMainProc, - &ftp->writepipe_exists, 0, true, - DUPLICATE_SAME_ACCESS)) - { - debug_printf ("couldn't duplicate writepipe_exists %p, %E", writepipe_exists); - goto err; - } - if (!read_state) /* nothing to do */; else if (DuplicateHandle (hMainProc, read_state, hMainProc, @@ -325,18 +278,10 @@ fhandler_pipe::dup (fhandler_base *child) err: if (ftp->guard) ForceCloseHandle1 (ftp->guard, guard); - if (ftp->writepipe_exists) - CloseHandle (ftp->writepipe_exists); if (ftp->read_state) ForceCloseHandle1 (ftp->read_state, read_state); - goto leave; out: - ftp->id = id; - ftp->orig_pid = orig_pid; - VerifyHandle (ftp->writepipe_exists); - -leave: debug_printf ("res %d", res); return res; } @@ -473,15 +418,6 @@ fhandler_pipe::create (fhandler_pipe *fhs[2], unsigned psize, int mode, bool fif res = 0; fhs[0]->create_guard (sa); - if (wincap.has_unreliable_pipes ()) - { - char buf[80]; - int count = pipecount++; /* FIXME: Should this be InterlockedIncrement? */ - __small_sprintf (buf, pipeid_fmt, myself->pid, count); - fhs[1]->writepipe_exists = CreateEvent (sa, TRUE, FALSE, buf); - fhs[0]->orig_pid = myself->pid; - fhs[0]->id = count; - } } syscall_printf ("%d = pipe ([%p, %p], %d, %p)", res, fhs[0], fhs[1], psize, mode); diff --git a/winsup/cygwin/wincap.cc b/winsup/cygwin/wincap.cc index 5c1bb8c26..e02f9c3e3 100644 --- a/winsup/cygwin/wincap.cc +++ b/winsup/cygwin/wincap.cc @@ -20,7 +20,6 @@ static NO_COPY wincaps wincap_unknown = { has_security_descriptor_control:false, has_ip_helper_lib:false, has_physical_mem_access:true, - has_unreliable_pipes:false, has_process_io_counters:false, has_terminal_services:false, has_ioctl_storage_get_media_types_ex:false, @@ -48,7 +47,6 @@ static NO_COPY wincaps wincap_nt4 = { has_security_descriptor_control:false, has_ip_helper_lib:false, has_physical_mem_access:true, - has_unreliable_pipes:false, has_process_io_counters:false, has_terminal_services:false, has_ioctl_storage_get_media_types_ex:false, @@ -76,7 +74,6 @@ static NO_COPY wincaps wincap_nt4sp4 = { has_security_descriptor_control:false, has_ip_helper_lib:true, has_physical_mem_access:true, - has_unreliable_pipes:false, has_process_io_counters:false, has_terminal_services:false, has_ioctl_storage_get_media_types_ex:false, @@ -104,7 +101,6 @@ static NO_COPY wincaps wincap_2000 = { has_security_descriptor_control:true, has_ip_helper_lib:true, has_physical_mem_access:true, - has_unreliable_pipes:false, has_process_io_counters:true, has_terminal_services:true, has_ioctl_storage_get_media_types_ex:false, @@ -132,7 +128,6 @@ static NO_COPY wincaps wincap_xp = { has_security_descriptor_control:true, has_ip_helper_lib:true, has_physical_mem_access:true, - has_unreliable_pipes:false, has_process_io_counters:true, has_terminal_services:true, has_ioctl_storage_get_media_types_ex:true, @@ -160,7 +155,6 @@ static NO_COPY wincaps wincap_2003 = { has_security_descriptor_control:true, has_ip_helper_lib:true, has_physical_mem_access:false, - has_unreliable_pipes:false, has_process_io_counters:true, has_terminal_services:true, has_ioctl_storage_get_media_types_ex:true, @@ -188,7 +182,6 @@ static NO_COPY wincaps wincap_vista = { has_security_descriptor_control:true, has_ip_helper_lib:true, has_physical_mem_access:false, - has_unreliable_pipes:false, has_process_io_counters:true, has_terminal_services:true, has_ioctl_storage_get_media_types_ex:true, diff --git a/winsup/cygwin/wincap.h b/winsup/cygwin/wincap.h index c3e9b0fc8..d47e371b2 100644 --- a/winsup/cygwin/wincap.h +++ b/winsup/cygwin/wincap.h @@ -20,7 +20,6 @@ struct wincaps unsigned has_security_descriptor_control : 1; unsigned has_ip_helper_lib : 1; unsigned has_physical_mem_access : 1; - unsigned has_unreliable_pipes : 1; unsigned has_process_io_counters : 1; unsigned has_terminal_services : 1; unsigned has_ioctl_storage_get_media_types_ex : 1; @@ -64,7 +63,6 @@ public: bool IMPLEMENT (has_security_descriptor_control) bool IMPLEMENT (has_ip_helper_lib) bool IMPLEMENT (has_physical_mem_access) - bool IMPLEMENT (has_unreliable_pipes) bool IMPLEMENT (has_process_io_counters) bool IMPLEMENT (has_terminal_services) bool IMPLEMENT (has_ioctl_storage_get_media_types_ex)