* 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.
This commit is contained in:
		| @@ -1,3 +1,18 @@ | |||||||
|  | 2007-02-23  Corinna Vinschen  <corinna@vinschen.de> | ||||||
|  |  | ||||||
|  | 	* 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  <corinna@vinschen.de> | 2007-02-23  Corinna Vinschen  <corinna@vinschen.de> | ||||||
|  |  | ||||||
| 	* devices.in: Change native device name to native NT device name for | 	* devices.in: Change native device name to native NT device name for | ||||||
|   | |||||||
| @@ -518,9 +518,6 @@ class fhandler_pipe: public fhandler_base | |||||||
| protected: | protected: | ||||||
|   HANDLE guard; |   HANDLE guard; | ||||||
|   bool broken_pipe; |   bool broken_pipe; | ||||||
|   HANDLE writepipe_exists; |  | ||||||
|   DWORD orig_pid; |  | ||||||
|   unsigned id; |  | ||||||
| private: | private: | ||||||
|   pid_t popen_pid; |   pid_t popen_pid; | ||||||
| public: | public: | ||||||
| @@ -548,7 +545,7 @@ public: | |||||||
|   void fixup_in_child (); |   void fixup_in_child (); | ||||||
|   virtual void fixup_after_fork (HANDLE); |   virtual void fixup_after_fork (HANDLE); | ||||||
|   void fixup_after_exec (); |   void fixup_after_exec (); | ||||||
|   bool hit_eof (); |   bool hit_eof () {return broken_pipe;} | ||||||
|   void set_eof () {broken_pipe = true;} |   void set_eof () {broken_pipe = true;} | ||||||
|   HANDLE get_guard () const {return guard;} |   HANDLE get_guard () const {return guard;} | ||||||
|   int ready_for_read (int fd, DWORD howlong); |   int ready_for_read (int fd, DWORD howlong); | ||||||
|   | |||||||
| @@ -203,9 +203,6 @@ fhandler_fifo::open (int flags, mode_t) | |||||||
|       set_output_handle (fhs[1]->get_handle ()); |       set_output_handle (fhs[1]->get_handle ()); | ||||||
|       guard = fhs[0]->guard; |       guard = fhs[0]->guard; | ||||||
|       read_state = fhs[0]->read_state; |       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[0]); | ||||||
|       delete (fhs[1]); |       delete (fhs[1]); | ||||||
|       set_use (1); |       set_use (1); | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| /* pipe.cc: pipe for Cygwin. | /* pipe.cc: pipe for Cygwin. | ||||||
|  |  | ||||||
|    Copyright 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 |    Copyright 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, | ||||||
|    Hat, Inc. |    2007 Hat, Inc. | ||||||
|  |  | ||||||
| This file is part of Cygwin. | This file is part of Cygwin. | ||||||
|  |  | ||||||
| @@ -27,12 +27,8 @@ details. */ | |||||||
| #include "cygthread.h" | #include "cygthread.h" | ||||||
| #include "ntdll.h" | #include "ntdll.h" | ||||||
|  |  | ||||||
| static unsigned pipecount; |  | ||||||
| static const NO_COPY char pipeid_fmt[] = "stupid_pipe.%u.%u"; |  | ||||||
|  |  | ||||||
| fhandler_pipe::fhandler_pipe () | fhandler_pipe::fhandler_pipe () | ||||||
|   : fhandler_base (), guard (NULL), broken_pipe (false), writepipe_exists (NULL), |   : fhandler_base (), guard (NULL), broken_pipe (false), popen_pid (0) | ||||||
|     orig_pid (0), id (0), popen_pid (0) |  | ||||||
| { | { | ||||||
|   need_fork_fixup (true); |   need_fork_fixup (true); | ||||||
| } | } | ||||||
| @@ -111,15 +107,6 @@ fhandler_pipe::open (int flags, mode_t mode) | |||||||
|       __seterrno (); |       __seterrno (); | ||||||
|       goto out; |       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) |   if (fh->read_state) | ||||||
|     create_read_state (2); |     create_read_state (2); | ||||||
|   init (nio_hdl, fh->get_access (), mode & O_TEXT ?: O_BINARY); |   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); |   CloseHandle (proc); | ||||||
|   return 1; |   return 1; | ||||||
| out: | out: | ||||||
|   if (writepipe_exists) |  | ||||||
|     CloseHandle (writepipe_exists); |  | ||||||
|   if (guard) |   if (guard) | ||||||
|     CloseHandle (guard); |     CloseHandle (guard); | ||||||
|   if (nio_hdl) |   if (nio_hdl) | ||||||
| @@ -174,8 +159,6 @@ fhandler_pipe::set_close_on_exec (bool val) | |||||||
|       set_no_inheritance (guard, val); |       set_no_inheritance (guard, val); | ||||||
|       ModifyHandle (guard, !val); |       ModifyHandle (guard, !val); | ||||||
|     } |     } | ||||||
|   if (writepipe_exists) |  | ||||||
|     set_no_inheritance (writepipe_exists, val); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| char * | char * | ||||||
| @@ -220,8 +203,6 @@ fhandler_pipe::close () | |||||||
| { | { | ||||||
|   if (guard) |   if (guard) | ||||||
|     ForceCloseHandle (guard); |     ForceCloseHandle (guard); | ||||||
|   if (writepipe_exists) |  | ||||||
|     CloseHandle (writepipe_exists); |  | ||||||
| #ifndef NEWVFORK | #ifndef NEWVFORK | ||||||
|   if (read_state) |   if (read_state) | ||||||
| #else | #else | ||||||
| @@ -234,22 +215,6 @@ fhandler_pipe::close () | |||||||
|   return fhandler_base::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 | void | ||||||
| fhandler_pipe::fixup_in_child () | fhandler_pipe::fixup_in_child () | ||||||
| { | { | ||||||
| @@ -270,8 +235,6 @@ fhandler_pipe::fixup_after_fork (HANDLE parent) | |||||||
|   fhandler_base::fixup_after_fork (parent); |   fhandler_base::fixup_after_fork (parent); | ||||||
|   if (guard && fork_fixup (parent, guard, "guard")) |   if (guard && fork_fixup (parent, guard, "guard")) | ||||||
|     ProtectHandle (guard); |     ProtectHandle (guard); | ||||||
|   if (writepipe_exists) |  | ||||||
|     fork_fixup (parent, writepipe_exists, "writepipe_exists"); |  | ||||||
|   fixup_in_child (); |   fixup_in_child (); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -281,7 +244,7 @@ fhandler_pipe::dup (fhandler_base *child) | |||||||
|   int res = -1; |   int res = -1; | ||||||
|   fhandler_pipe *ftp = (fhandler_pipe *) child; |   fhandler_pipe *ftp = (fhandler_pipe *) child; | ||||||
|   ftp->set_popen_pid (0); |   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)) |   if (get_handle () && fhandler_base::dup (child)) | ||||||
|     goto err; |     goto err; | ||||||
| @@ -297,16 +260,6 @@ fhandler_pipe::dup (fhandler_base *child) | |||||||
|       goto err; |       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) |   if (!read_state) | ||||||
|     /* nothing to do */; |     /* nothing to do */; | ||||||
|   else if (DuplicateHandle (hMainProc, read_state, hMainProc, |   else if (DuplicateHandle (hMainProc, read_state, hMainProc, | ||||||
| @@ -325,18 +278,10 @@ fhandler_pipe::dup (fhandler_base *child) | |||||||
| err: | err: | ||||||
|   if (ftp->guard) |   if (ftp->guard) | ||||||
|     ForceCloseHandle1 (ftp->guard, guard); |     ForceCloseHandle1 (ftp->guard, guard); | ||||||
|   if (ftp->writepipe_exists) |  | ||||||
|     CloseHandle (ftp->writepipe_exists); |  | ||||||
|   if (ftp->read_state) |   if (ftp->read_state) | ||||||
|     ForceCloseHandle1 (ftp->read_state, read_state); |     ForceCloseHandle1 (ftp->read_state, read_state); | ||||||
|   goto leave; |  | ||||||
|  |  | ||||||
| out: | out: | ||||||
|   ftp->id = id; |  | ||||||
|   ftp->orig_pid = orig_pid; |  | ||||||
|   VerifyHandle (ftp->writepipe_exists); |  | ||||||
|  |  | ||||||
| leave: |  | ||||||
|   debug_printf ("res %d", res); |   debug_printf ("res %d", res); | ||||||
|   return res; |   return res; | ||||||
| } | } | ||||||
| @@ -473,15 +418,6 @@ fhandler_pipe::create (fhandler_pipe *fhs[2], unsigned psize, int mode, bool fif | |||||||
|  |  | ||||||
|       res = 0; |       res = 0; | ||||||
|       fhs[0]->create_guard (sa); |       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); |   syscall_printf ("%d = pipe ([%p, %p], %d, %p)", res, fhs[0], fhs[1], psize, mode); | ||||||
|   | |||||||
| @@ -20,7 +20,6 @@ static NO_COPY wincaps wincap_unknown = { | |||||||
|   has_security_descriptor_control:false, |   has_security_descriptor_control:false, | ||||||
|   has_ip_helper_lib:false, |   has_ip_helper_lib:false, | ||||||
|   has_physical_mem_access:true, |   has_physical_mem_access:true, | ||||||
|   has_unreliable_pipes:false, |  | ||||||
|   has_process_io_counters:false, |   has_process_io_counters:false, | ||||||
|   has_terminal_services:false, |   has_terminal_services:false, | ||||||
|   has_ioctl_storage_get_media_types_ex: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_security_descriptor_control:false, | ||||||
|   has_ip_helper_lib:false, |   has_ip_helper_lib:false, | ||||||
|   has_physical_mem_access:true, |   has_physical_mem_access:true, | ||||||
|   has_unreliable_pipes:false, |  | ||||||
|   has_process_io_counters:false, |   has_process_io_counters:false, | ||||||
|   has_terminal_services:false, |   has_terminal_services:false, | ||||||
|   has_ioctl_storage_get_media_types_ex: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_security_descriptor_control:false, | ||||||
|   has_ip_helper_lib:true, |   has_ip_helper_lib:true, | ||||||
|   has_physical_mem_access:true, |   has_physical_mem_access:true, | ||||||
|   has_unreliable_pipes:false, |  | ||||||
|   has_process_io_counters:false, |   has_process_io_counters:false, | ||||||
|   has_terminal_services:false, |   has_terminal_services:false, | ||||||
|   has_ioctl_storage_get_media_types_ex: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_security_descriptor_control:true, | ||||||
|   has_ip_helper_lib:true, |   has_ip_helper_lib:true, | ||||||
|   has_physical_mem_access:true, |   has_physical_mem_access:true, | ||||||
|   has_unreliable_pipes:false, |  | ||||||
|   has_process_io_counters:true, |   has_process_io_counters:true, | ||||||
|   has_terminal_services:true, |   has_terminal_services:true, | ||||||
|   has_ioctl_storage_get_media_types_ex:false, |   has_ioctl_storage_get_media_types_ex:false, | ||||||
| @@ -132,7 +128,6 @@ static NO_COPY wincaps wincap_xp = { | |||||||
|   has_security_descriptor_control:true, |   has_security_descriptor_control:true, | ||||||
|   has_ip_helper_lib:true, |   has_ip_helper_lib:true, | ||||||
|   has_physical_mem_access:true, |   has_physical_mem_access:true, | ||||||
|   has_unreliable_pipes:false, |  | ||||||
|   has_process_io_counters:true, |   has_process_io_counters:true, | ||||||
|   has_terminal_services:true, |   has_terminal_services:true, | ||||||
|   has_ioctl_storage_get_media_types_ex: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_security_descriptor_control:true, | ||||||
|   has_ip_helper_lib:true, |   has_ip_helper_lib:true, | ||||||
|   has_physical_mem_access:false, |   has_physical_mem_access:false, | ||||||
|   has_unreliable_pipes:false, |  | ||||||
|   has_process_io_counters:true, |   has_process_io_counters:true, | ||||||
|   has_terminal_services:true, |   has_terminal_services:true, | ||||||
|   has_ioctl_storage_get_media_types_ex: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_security_descriptor_control:true, | ||||||
|   has_ip_helper_lib:true, |   has_ip_helper_lib:true, | ||||||
|   has_physical_mem_access:false, |   has_physical_mem_access:false, | ||||||
|   has_unreliable_pipes:false, |  | ||||||
|   has_process_io_counters:true, |   has_process_io_counters:true, | ||||||
|   has_terminal_services:true, |   has_terminal_services:true, | ||||||
|   has_ioctl_storage_get_media_types_ex:true, |   has_ioctl_storage_get_media_types_ex:true, | ||||||
|   | |||||||
| @@ -20,7 +20,6 @@ struct wincaps | |||||||
|   unsigned has_security_descriptor_control              : 1; |   unsigned has_security_descriptor_control              : 1; | ||||||
|   unsigned has_ip_helper_lib                            : 1; |   unsigned has_ip_helper_lib                            : 1; | ||||||
|   unsigned has_physical_mem_access                      : 1; |   unsigned has_physical_mem_access                      : 1; | ||||||
|   unsigned has_unreliable_pipes                         : 1; |  | ||||||
|   unsigned has_process_io_counters                      : 1; |   unsigned has_process_io_counters                      : 1; | ||||||
|   unsigned has_terminal_services			: 1; |   unsigned has_terminal_services			: 1; | ||||||
|   unsigned has_ioctl_storage_get_media_types_ex		: 1; |   unsigned has_ioctl_storage_get_media_types_ex		: 1; | ||||||
| @@ -64,7 +63,6 @@ public: | |||||||
|   bool  IMPLEMENT (has_security_descriptor_control) |   bool  IMPLEMENT (has_security_descriptor_control) | ||||||
|   bool  IMPLEMENT (has_ip_helper_lib) |   bool  IMPLEMENT (has_ip_helper_lib) | ||||||
|   bool  IMPLEMENT (has_physical_mem_access) |   bool  IMPLEMENT (has_physical_mem_access) | ||||||
|   bool  IMPLEMENT (has_unreliable_pipes) |  | ||||||
|   bool  IMPLEMENT (has_process_io_counters) |   bool  IMPLEMENT (has_process_io_counters) | ||||||
|   bool  IMPLEMENT (has_terminal_services) |   bool  IMPLEMENT (has_terminal_services) | ||||||
|   bool	IMPLEMENT (has_ioctl_storage_get_media_types_ex) |   bool	IMPLEMENT (has_ioctl_storage_get_media_types_ex) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user