* 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> | ||||
|  | ||||
| 	* fhandler.cc (fhandler_base::dup): Call setup_overlapped | ||||
|   | ||||
| @@ -569,6 +569,8 @@ public: | ||||
|   void set_overlapped (OVERLAPPED *ov) {overlapped = ov;} | ||||
|   fhandler_base_overlapped (): io_pending (false), overlapped (NULL) {} | ||||
|   bool has_ongoing_io (); | ||||
|   friend class select_pipe_info;	/* FIXME: At least correct the naming | ||||
| 					   here */ | ||||
| }; | ||||
|  | ||||
| class fhandler_pipe: public fhandler_base_overlapped | ||||
|   | ||||
| @@ -597,7 +597,7 @@ select_pipe_info::~select_pipe_info () | ||||
| void | ||||
| 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; | ||||
| } | ||||
|  | ||||
| @@ -906,19 +906,50 @@ fhandler_console::select_except (select_stuff *ss) | ||||
| select_record * | ||||
| 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 * | ||||
| 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 * | ||||
| 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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user