* fhandler.h (fhandler_base_overlapped): Temporarily (?) make select_pipe_info
a friend until the fhandler_tty intertangling can be worked out. * select.cc (select_pipe_info::add_watch_handle): Don't inspect the overlapped event if we're not waiting for I/O. (fhandler_tty_common::select_*): Change to standard function. Don't do kludgy fhandler_pipe coercion.
This commit is contained in:
		| @@ -1,3 +1,13 @@ | |||||||
|  | 2010-03-31  Christopher Faylor  <me+cygwin@cgf.cx> | ||||||
|  |  | ||||||
|  | 	* fhandler.h (fhandler_base_overlapped): Temporarily (?) make | ||||||
|  | 	select_pipe_info a friend until the fhandler_tty intertangling can be | ||||||
|  | 	worked out. | ||||||
|  | 	* select.cc (select_pipe_info::add_watch_handle): Don't inspect the | ||||||
|  | 	overlapped event if we're not waiting for I/O. | ||||||
|  | 	(fhandler_tty_common::select_*): Change to standard function.  Don't do | ||||||
|  | 	kludgy fhandler_pipe coercion. | ||||||
|  |  | ||||||
| 2010-03-31  Christopher Faylor  <me+cygwin@cgf.cx> | 2010-03-31  Christopher Faylor  <me+cygwin@cgf.cx> | ||||||
|  |  | ||||||
| 	* fhandler.cc (fhandler_base::dup): Call setup_overlapped | 	* fhandler.cc (fhandler_base::dup): Call setup_overlapped | ||||||
|   | |||||||
| @@ -569,6 +569,8 @@ public: | |||||||
|   void set_overlapped (OVERLAPPED *ov) {overlapped = ov;} |   void set_overlapped (OVERLAPPED *ov) {overlapped = ov;} | ||||||
|   fhandler_base_overlapped (): io_pending (false), overlapped (NULL) {} |   fhandler_base_overlapped (): io_pending (false), overlapped (NULL) {} | ||||||
|   bool has_ongoing_io (); |   bool has_ongoing_io (); | ||||||
|  |   friend class select_pipe_info;	/* FIXME: At least correct the naming | ||||||
|  | 					   here */ | ||||||
| }; | }; | ||||||
|  |  | ||||||
| class fhandler_pipe: public fhandler_base_overlapped | class fhandler_pipe: public fhandler_base_overlapped | ||||||
|   | |||||||
| @@ -597,7 +597,7 @@ select_pipe_info::~select_pipe_info () | |||||||
| void | void | ||||||
| select_pipe_info::add_watch_handle (fhandler_pipe *fh) | select_pipe_info::add_watch_handle (fhandler_pipe *fh) | ||||||
| { | { | ||||||
|   if (fh->get_overlapped () && fh->get_overlapped ()->hEvent) |   if (fh->io_pending && fh->get_overlapped () && fh->get_overlapped ()->hEvent) | ||||||
|     w4[n++] = fh->get_overlapped ()->hEvent; |     w4[n++] = fh->get_overlapped ()->hEvent; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -906,19 +906,50 @@ fhandler_console::select_except (select_stuff *ss) | |||||||
| select_record * | select_record * | ||||||
| fhandler_tty_common::select_read (select_stuff *ss) | fhandler_tty_common::select_read (select_stuff *ss) | ||||||
| { | { | ||||||
|   return ((fhandler_pipe *) this)->fhandler_pipe::select_read (ss); |   if (!ss->device_specific_pipe | ||||||
|  |       && (ss->device_specific_pipe = new select_pipe_info) == NULL) | ||||||
|  |     return NULL; | ||||||
|  |  | ||||||
|  |   select_record *s = ss->start.next; | ||||||
|  |   s->startup = start_thread_pipe; | ||||||
|  |   s->peek = peek_pipe; | ||||||
|  |   s->verify = verify_ok; | ||||||
|  |   s->cleanup = pipe_cleanup; | ||||||
|  |   s->read_selected = true; | ||||||
|  |   s->read_ready = false; | ||||||
|  |   return s; | ||||||
| } | } | ||||||
|  |  | ||||||
| select_record * | select_record * | ||||||
| fhandler_tty_common::select_write (select_stuff *ss) | fhandler_tty_common::select_write (select_stuff *ss) | ||||||
| { | { | ||||||
|   return ((fhandler_pipe *) this)->fhandler_pipe::select_write (ss); |   if (!ss->device_specific_pipe | ||||||
|  |       && (ss->device_specific_pipe = new select_pipe_info) == NULL) | ||||||
|  |     return NULL; | ||||||
|  |   select_record *s = ss->start.next; | ||||||
|  |   s->startup = start_thread_pipe; | ||||||
|  |   s->peek = peek_pipe; | ||||||
|  |   s->verify = verify_ok; | ||||||
|  |   s->cleanup = pipe_cleanup; | ||||||
|  |   s->write_selected = true; | ||||||
|  |   s->write_ready = false; | ||||||
|  |   return s; | ||||||
| } | } | ||||||
|  |  | ||||||
| select_record * | select_record * | ||||||
| fhandler_tty_common::select_except (select_stuff *ss) | fhandler_tty_common::select_except (select_stuff *ss) | ||||||
| { | { | ||||||
|   return ((fhandler_pipe *) this)->fhandler_pipe::select_except (ss); |   if (!ss->device_specific_pipe | ||||||
|  |       && (ss->device_specific_pipe = new select_pipe_info) == NULL) | ||||||
|  |     return NULL; | ||||||
|  |   select_record *s = ss->start.next; | ||||||
|  |   s->startup = start_thread_pipe; | ||||||
|  |   s->peek = peek_pipe; | ||||||
|  |   s->verify = verify_ok; | ||||||
|  |   s->cleanup = pipe_cleanup; | ||||||
|  |   s->except_selected = true; | ||||||
|  |   s->except_ready = false; | ||||||
|  |   return s; | ||||||
| } | } | ||||||
|  |  | ||||||
| static int | static int | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user