* event-loop.c (gdb_select): Program defensively.
This commit is contained in:
parent
e459dc7b30
commit
3aa6b2ca26
2 changed files with 12 additions and 5 deletions
|
@ -1,5 +1,7 @@
|
|||
2005-04-25 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* event-loop.c (gdb_select): Program defensively.
|
||||
|
||||
* event-loop.c (gdb_assert.h): Include.
|
||||
(<windows.h>): Include under Windows.
|
||||
(<io.h>): Likeiwse.
|
||||
|
|
|
@ -760,7 +760,10 @@ gdb_select (int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
|
|||
if something starts using it. */
|
||||
gdb_assert (!FD_ISSET (fd, writefds));
|
||||
if (FD_ISSET (fd, readfds))
|
||||
handles[num_handles++] = (HANDLE) _get_osfhandle (fd);
|
||||
{
|
||||
gdb_assert (num_handles < MAXIMUM_WAIT_OBJECTS);
|
||||
handles[num_handles++] = (HANDLE) _get_osfhandle (fd);
|
||||
}
|
||||
}
|
||||
event = WaitForMultipleObjects (num_handles,
|
||||
handles,
|
||||
|
@ -779,15 +782,17 @@ gdb_select (int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
|
|||
return 0;
|
||||
/* Run through the READFDS, clearing bits corresponding to descriptors
|
||||
for which input is unavailable. */
|
||||
num_ready = num_handlers;
|
||||
num_ready = num_handles;
|
||||
h = handles[event - WAIT_OBJECT_0];
|
||||
for (fd = 0; fd < n; ++fd)
|
||||
{
|
||||
HANDLE fd_h = (HANDLE) _get_osfhandle (fd);
|
||||
HANDLE fd_h;
|
||||
if (!FD_ISSET (fd, readfds))
|
||||
continue;
|
||||
fd_h = (HANDLE) _get_osfhandle (fd);
|
||||
/* This handle might be ready, even though it wasn't the handle
|
||||
returned by WaitForMultipleObjects. */
|
||||
if (FD_ISSET (fd, readfds) && fd_h != h
|
||||
&& WaitForSingleObject (fd_h, 0) != WAIT_OBJECT_0)
|
||||
if (fd_h != h && WaitForSingleObject (fd_h, 0) != WAIT_OBJECT_0)
|
||||
{
|
||||
FD_CLR (fd, readfds);
|
||||
--num_ready;
|
||||
|
|
Loading…
Reference in a new issue