Patch from Frederic Devernay <Frederic.Devernay@sophia.inria.fr>:
* poll.cc (poll): Call cygwin_select() if any fd is valid.
This commit is contained in:
		| @@ -1,3 +1,7 @@ | ||||
| 2001-10-16  Frederic Devernay  <Frederic.Devernay@sophia.inria.fr> | ||||
|  | ||||
| 	* poll.cc (poll): Call cygwin_select() if any fd is valid. | ||||
|  | ||||
| 2001-10-16  Corinna Vinschen  <corinna@vinschen.de> | ||||
|  | ||||
| 	* fhandler_raw.cc (fhandler_dev_raw::open): Eliminate compatibility | ||||
|   | ||||
| @@ -51,10 +51,12 @@ poll (struct pollfd *fds, unsigned int nfds, int timeout) | ||||
|   memset (write_fds, 0, fds_size); | ||||
|   memset (except_fds, 0, fds_size); | ||||
|  | ||||
|   bool invalid_fds = false; | ||||
|   bool valid_fds = false; | ||||
|   for (unsigned int i = 0; i < nfds; ++i) | ||||
|     if (!cygheap->fdtab.not_open (fds[i].fd)) | ||||
|       { | ||||
| 	valid_fds = true; | ||||
| 	fds[i].revents = 0;	 | ||||
| 	FD_SET (fds[i].fd, open_fds); | ||||
| 	if (fds[i].events & POLLIN) | ||||
| 	  FD_SET (fds[i].fd, read_fds); | ||||
| @@ -64,20 +66,17 @@ poll (struct pollfd *fds, unsigned int nfds, int timeout) | ||||
| 	  FD_SET (fds[i].fd, except_fds); | ||||
|       } | ||||
|       else | ||||
| 	invalid_fds = true; | ||||
| 	fds[i].revents = POLLNVAL; | ||||
|  | ||||
|   int ret = 0; | ||||
|   if (!invalid_fds) | ||||
|   if (valid_fds) | ||||
|     ret = cygwin_select (max_fd + 1, read_fds, write_fds, except_fds, | ||||
| 			 timeout < 0 ? NULL : &tv); | ||||
|  | ||||
|   for (unsigned int i = 0; i < nfds; ++i) | ||||
|     { | ||||
|       if (!FD_ISSET (fds[i].fd, open_fds)) | ||||
| 	{ | ||||
| 	  fds[i].revents = POLLNVAL; | ||||
| 	  ret++; | ||||
| 	} | ||||
|       if (fds[i].revents == POLLNVAL && ret >= 0) | ||||
| 	ret++; | ||||
|       else if (cygheap->fdtab.not_open(fds[i].fd)) | ||||
| 	fds[i].revents = POLLHUP; | ||||
|       else if (ret < 0) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user