This is the mail archive of the
gdb-patches@sourceware.cygnus.com
mailing list for the GDB project.
Re: HAVE_POLL is not enough - RFA
I committed the following:
Same as original patch except for the USE_POLL thing, and I also added
a comment explaining the reason for the run time test for poll().
Elena
Index: event-loop.c
===================================================================
RCS file: /cvs/src/src/gdb/event-loop.c,v
retrieving revision 1.4
diff -c -r1.4 event-loop.c
*** event-loop.c 2000/03/20 19:59:38 1.4
--- event-loop.c 2000/03/23 03:42:24
***************
*** 25,34 ****
#include "event-top.h"
#ifdef HAVE_POLL
#include <poll.h>
! #else
#include <sys/types.h>
#include <string.h>
- #endif
#include <errno.h>
#include <setjmp.h>
#include <sys/time.h>
--- 25,33 ----
#include "event-top.h"
#ifdef HAVE_POLL
#include <poll.h>
! #endif
#include <sys/types.h>
#include <string.h>
#include <errno.h>
#include <setjmp.h>
#include <sys/time.h>
***************
*** 166,201 ****
/* As of 1999-04-30 only the input file descriptor is registered with the
event loop. */
#ifdef HAVE_POLL
! /* Poll based implementation of the notifier. */
static struct
{
/* Ptr to head of file handler list. */
file_handler *first_file_handler;
/* Ptr to array of pollfd structures. */
struct pollfd *poll_fds;
- /* Number of file descriptors to monitor. */
- int num_fds;
-
/* Timeout in milliseconds for calls to poll(). */
! int timeout;
!
! /* Flag to tell whether the timeout value shuld be used. */
! int timeout_valid;
! }
! gdb_notifier;
!
! #else /* ! HAVE_POLL */
!
! /* Select based implementation of the notifier. */
!
! static struct
! {
! /* Ptr to head of file handler list. */
! file_handler *first_file_handler;
/* Masks to be used in the next call to select.
Bits are set in response to calls to create_file_handler. */
--- 165,191 ----
/* As of 1999-04-30 only the input file descriptor is registered with the
event loop. */
+ /* Do we use poll or select ? */
#ifdef HAVE_POLL
! #define USE_POLL 1
! #else
! #define USE_POLL 0
! #endif /* HAVE_POLL */
+ static unsigned char use_poll = USE_POLL;
+
static struct
{
/* Ptr to head of file handler list. */
file_handler *first_file_handler;
+ #ifdef HAVE_POLL
/* Ptr to array of pollfd structures. */
struct pollfd *poll_fds;
/* Timeout in milliseconds for calls to poll(). */
! int poll_timeout;
! #endif
/* Masks to be used in the next call to select.
Bits are set in response to calls to create_file_handler. */
***************
*** 204,222 ****
/* What file descriptors were found ready by select. */
fd_set ready_masks[3];
! /* Number of valid bits (highest fd value + 1). */
int num_fds;
/* Time structure for calls to select(). */
! struct timeval timeout;
! /* Flag to tell whether the timeout struct should be used. */
int timeout_valid;
}
gdb_notifier;
- #endif /* HAVE_POLL */
-
/* Structure associated with a timer. PROC will be executed at the
first occasion after WHEN. */
struct gdb_timer
--- 194,211 ----
/* What file descriptors were found ready by select. */
fd_set ready_masks[3];
! /* Number of file descriptors to monitor. (for poll) */
! /* Number of valid bits (highest fd value + 1). (for select) */
int num_fds;
/* Time structure for calls to select(). */
! struct timeval select_timeout;
! /* Flag to tell whether the timeout should be used. */
int timeout_valid;
}
gdb_notifier;
/* Structure associated with a timer. PROC will be executed at the
first occasion after WHEN. */
struct gdb_timer
***************
*** 384,390 ****
}
free ((char *) event_ptr);
! /* Now call the procedure associted with the event. */
(*proc) (fd);
return 1;
}
--- 373,379 ----
}
free ((char *) event_ptr);
! /* Now call the procedure associated with the event. */
(*proc) (fd);
return 1;
}
***************
*** 473,482 ****
add_file_handler (int fd, handler_func * proc, gdb_client_data client_data)
{
#ifdef HAVE_POLL
! create_file_handler (fd, POLLIN, proc, client_data);
#else
! create_file_handler (fd, GDB_READABLE | GDB_EXCEPTION, proc, client_data);
#endif
}
/* Add a file handler/descriptor to the list of descriptors we are
--- 462,496 ----
add_file_handler (int fd, handler_func * proc, gdb_client_data client_data)
{
#ifdef HAVE_POLL
! struct pollfd fds;
! #endif
!
! if (use_poll)
! {
! #ifdef HAVE_POLL
! /* Check to see if poll () is usable. If not, we'll switch to
! use select. This can happen on systems like
! m68k-motorola-sys, `poll' cannot be used to wait for `stdin'.
! On m68k-motorola-sysv, tty's are not stream-based and not
! `poll'able.*/
! fds.fd = fd;
! fds.events = POLLIN;
! if (poll (&fds, 1, 0) == 1 && (fds.revents & POLLNVAL))
! use_poll = 0;
! #else
! internal_error ("event-loop.c : use_poll without HAVE_POLL");
! #endif /* HAVE_POLL */
! }
! if (use_poll)
! {
! #ifdef HAVE_POLL
! create_file_handler (fd, POLLIN, proc, client_data);
#else
! internal_error ("event-loop.c : use_poll without HAVE_POLL");
#endif
+ }
+ else
+ create_file_handler (fd, GDB_READABLE | GDB_EXCEPTION, proc, client_data);
}
/* Add a file handler/descriptor to the list of descriptors we are
***************
*** 512,559 ****
file_ptr->ready_mask = 0;
file_ptr->next_file = gdb_notifier.first_file_handler;
gdb_notifier.first_file_handler = file_ptr;
- #ifdef HAVE_POLL
- gdb_notifier.num_fds++;
- #endif
}
file_ptr->proc = proc;
file_ptr->client_data = client_data;
file_ptr->mask = mask;
#ifdef HAVE_POLL
!
! if (gdb_notifier.poll_fds)
! gdb_notifier.poll_fds =
! (struct pollfd *) realloc (gdb_notifier.poll_fds,
! (gdb_notifier.num_fds) * sizeof (struct pollfd));
! else
! gdb_notifier.poll_fds =
! (struct pollfd *) xmalloc (sizeof (struct pollfd));
! (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->fd = fd;
! (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->events = mask;
! (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->revents = 0;
!
! #else /* ! HAVE_POLL */
!
! if (mask & GDB_READABLE)
! FD_SET (fd, &gdb_notifier.check_masks[0]);
! else
! FD_CLR (fd, &gdb_notifier.check_masks[0]);
!
! if (mask & GDB_WRITABLE)
! FD_SET (fd, &gdb_notifier.check_masks[1]);
else
! FD_CLR (fd, &gdb_notifier.check_masks[1]);
! if (mask & GDB_EXCEPTION)
! FD_SET (fd, &gdb_notifier.check_masks[2]);
! else
! FD_CLR (fd, &gdb_notifier.check_masks[2]);
! if (gdb_notifier.num_fds <= fd)
! gdb_notifier.num_fds = fd + 1;
! #endif /* HAVE_POLL */
}
/* Remove the file descriptor FD from the list of monitored fd's:
--- 526,574 ----
file_ptr->ready_mask = 0;
file_ptr->next_file = gdb_notifier.first_file_handler;
gdb_notifier.first_file_handler = file_ptr;
}
file_ptr->proc = proc;
file_ptr->client_data = client_data;
file_ptr->mask = mask;
+ if (use_poll)
+ {
#ifdef HAVE_POLL
! gdb_notifier.num_fds++;
! if (gdb_notifier.poll_fds)
! gdb_notifier.poll_fds =
! (struct pollfd *) realloc (gdb_notifier.poll_fds,
! (gdb_notifier.num_fds) * sizeof (struct pollfd));
! else
! gdb_notifier.poll_fds =
! (struct pollfd *) xmalloc (sizeof (struct pollfd));
! (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->fd = fd;
! (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->events = mask;
! (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->revents = 0;
! #else
! internal_error ("event-loop.c : use_poll without HAVE_POLL");
! #endif /* HAVE_POLL */
! }
else
! {
! if (mask & GDB_READABLE)
! FD_SET (fd, &gdb_notifier.check_masks[0]);
! else
! FD_CLR (fd, &gdb_notifier.check_masks[0]);
! if (mask & GDB_WRITABLE)
! FD_SET (fd, &gdb_notifier.check_masks[1]);
! else
! FD_CLR (fd, &gdb_notifier.check_masks[1]);
! if (mask & GDB_EXCEPTION)
! FD_SET (fd, &gdb_notifier.check_masks[2]);
! else
! FD_CLR (fd, &gdb_notifier.check_masks[2]);
! if (gdb_notifier.num_fds <= fd)
! gdb_notifier.num_fds = fd + 1;
! }
}
/* Remove the file descriptor FD from the list of monitored fd's:
***************
*** 580,630 ****
if (file_ptr == NULL)
return;
#ifdef HAVE_POLL
! /* Create a new poll_fds array by copying every fd's information but the
! one we want to get rid of. */
! new_poll_fds =
! (struct pollfd *) xmalloc ((gdb_notifier.num_fds - 1) * sizeof (struct pollfd));
! for (i = 0, j = 0; i < gdb_notifier.num_fds; i++)
! {
! if ((gdb_notifier.poll_fds + i)->fd != fd)
{
! (new_poll_fds + j)->fd = (gdb_notifier.poll_fds + i)->fd;
! (new_poll_fds + j)->events = (gdb_notifier.poll_fds + i)->events;
! (new_poll_fds + j)->revents = (gdb_notifier.poll_fds + i)->revents;
! j++;
}
}
! free (gdb_notifier.poll_fds);
! gdb_notifier.poll_fds = new_poll_fds;
! gdb_notifier.num_fds--;
!
! #else /* ! HAVE_POLL */
!
! if (file_ptr->mask & GDB_READABLE)
! FD_CLR (fd, &gdb_notifier.check_masks[0]);
! if (file_ptr->mask & GDB_WRITABLE)
! FD_CLR (fd, &gdb_notifier.check_masks[1]);
! if (file_ptr->mask & GDB_EXCEPTION)
! FD_CLR (fd, &gdb_notifier.check_masks[2]);
! /* Find current max fd. */
! if ((fd + 1) == gdb_notifier.num_fds)
! {
! gdb_notifier.num_fds--;
! for (i = gdb_notifier.num_fds; i; i--)
{
! if (FD_ISSET (i - 1, &gdb_notifier.check_masks[0])
! || FD_ISSET (i - 1, &gdb_notifier.check_masks[1])
! || FD_ISSET (i - 1, &gdb_notifier.check_masks[2]))
! break;
}
- gdb_notifier.num_fds = i;
}
- #endif /* HAVE_POLL */
/* Deactivate the file descriptor, by clearing its mask,
so that it will not fire again. */
--- 595,650 ----
if (file_ptr == NULL)
return;
+ if (use_poll)
+ {
#ifdef HAVE_POLL
! /* Create a new poll_fds array by copying every fd's information but the
! one we want to get rid of. */
! new_poll_fds =
! (struct pollfd *) xmalloc ((gdb_notifier.num_fds - 1) * sizeof (struct pollfd));
! for (i = 0, j = 0; i < gdb_notifier.num_fds; i++)
{
! if ((gdb_notifier.poll_fds + i)->fd != fd)
! {
! (new_poll_fds + j)->fd = (gdb_notifier.poll_fds + i)->fd;
! (new_poll_fds + j)->events = (gdb_notifier.poll_fds + i)->events;
! (new_poll_fds + j)->revents = (gdb_notifier.poll_fds + i)->revents;
! j++;
! }
}
+ free (gdb_notifier.poll_fds);
+ gdb_notifier.poll_fds = new_poll_fds;
+ gdb_notifier.num_fds--;
+ #else
+ internal_error ("event-loop.c : use_poll without HAVE_POLL");
+ #endif /* HAVE_POLL */
}
! else
! {
! if (file_ptr->mask & GDB_READABLE)
! FD_CLR (fd, &gdb_notifier.check_masks[0]);
! if (file_ptr->mask & GDB_WRITABLE)
! FD_CLR (fd, &gdb_notifier.check_masks[1]);
! if (file_ptr->mask & GDB_EXCEPTION)
! FD_CLR (fd, &gdb_notifier.check_masks[2]);
! /* Find current max fd. */
! if ((fd + 1) == gdb_notifier.num_fds)
{
! gdb_notifier.num_fds--;
! for (i = gdb_notifier.num_fds; i; i--)
! {
! if (FD_ISSET (i - 1, &gdb_notifier.check_masks[0])
! || FD_ISSET (i - 1, &gdb_notifier.check_masks[1])
! || FD_ISSET (i - 1, &gdb_notifier.check_masks[2]))
! break;
! }
! gdb_notifier.num_fds = i;
}
}
/* Deactivate the file descriptor, by clearing its mask,
so that it will not fire again. */
***************
*** 675,711 ****
/* See if the desired events (mask) match the received
events (ready_mask). */
-
- #ifdef HAVE_POLL
- error_mask = POLLHUP | POLLERR | POLLNVAL;
- mask = (file_ptr->ready_mask & file_ptr->mask) |
- (file_ptr->ready_mask & error_mask);
- error_mask_returned = mask & error_mask;
! if (error_mask_returned != 0)
{
! /* Work in progress. We may need to tell somebody what
! kind of error we had. */
! if (error_mask_returned & POLLHUP)
! printf_unfiltered ("Hangup detected on fd %d\n", file_ptr->fd);
! if (error_mask_returned & POLLERR)
! printf_unfiltered ("Error detected on fd %d\n", file_ptr->fd);
! if (error_mask_returned & POLLNVAL)
! printf_unfiltered ("Invalid or non-`poll'able fd %d\n", file_ptr->fd);
! file_ptr->error = 1;
}
else
- file_ptr->error = 0;
- #else /* ! HAVE_POLL */
- if (file_ptr->ready_mask & GDB_EXCEPTION)
{
! printf_unfiltered ("Exception condition detected on fd %d\n", file_ptr->fd);
! file_ptr->error = 1;
}
- else
- file_ptr->error = 0;
- mask = file_ptr->ready_mask & file_ptr->mask;
- #endif /* HAVE_POLL */
/* Clear the received events for next time around. */
file_ptr->ready_mask = 0;
--- 695,738 ----
/* See if the desired events (mask) match the received
events (ready_mask). */
! if (use_poll)
{
! #ifdef HAVE_POLL
! error_mask = POLLHUP | POLLERR | POLLNVAL;
! mask = (file_ptr->ready_mask & file_ptr->mask) |
! (file_ptr->ready_mask & error_mask);
! error_mask_returned = mask & error_mask;
!
! if (error_mask_returned != 0)
! {
! /* Work in progress. We may need to tell somebody what
! kind of error we had. */
! if (error_mask_returned & POLLHUP)
! printf_unfiltered ("Hangup detected on fd %d\n", file_ptr->fd);
! if (error_mask_returned & POLLERR)
! printf_unfiltered ("Error detected on fd %d\n", file_ptr->fd);
! if (error_mask_returned & POLLNVAL)
! printf_unfiltered ("Invalid or non-`poll'able fd %d\n", file_ptr->fd);
! file_ptr->error = 1;
! }
! else
! file_ptr->error = 0;
! #else
! internal_error ("event-loop.c : use_poll without HAVE_POLL");
! #endif /* HAVE_POLL */
}
else
{
! if (file_ptr->ready_mask & GDB_EXCEPTION)
! {
! printf_unfiltered ("Exception condition detected on fd %d\n", file_ptr->fd);
! file_ptr->error = 1;
! }
! else
! file_ptr->error = 0;
! mask = file_ptr->ready_mask & file_ptr->mask;
}
/* Clear the received events for next time around. */
file_ptr->ready_mask = 0;
***************
*** 731,739 ****
file_handler *file_ptr;
gdb_event *file_event_ptr;
int num_found = 0;
- #ifdef HAVE_POLL
int i;
- #endif
/* Make sure all output is done before getting another event. */
gdb_flush (gdb_stdout);
--- 758,764 ----
***************
*** 742,849 ****
if (gdb_notifier.num_fds == 0)
return -1;
#ifdef HAVE_POLL
! num_found =
! poll (gdb_notifier.poll_fds,
! (unsigned long) gdb_notifier.num_fds,
! gdb_notifier.timeout_valid ? gdb_notifier.timeout : -1);
!
! /* Don't print anything if we get out of poll because of a
! signal. */
! if (num_found == -1 && errno != EINTR)
! perror_with_name ("Poll");
!
! #else /* ! HAVE_POLL */
!
! gdb_notifier.ready_masks[0] = gdb_notifier.check_masks[0];
! gdb_notifier.ready_masks[1] = gdb_notifier.check_masks[1];
! gdb_notifier.ready_masks[2] = gdb_notifier.check_masks[2];
!
! num_found = select (gdb_notifier.num_fds,
! & gdb_notifier.ready_masks[0],
! & gdb_notifier.ready_masks[1],
! & gdb_notifier.ready_masks[2],
! gdb_notifier.timeout_valid
! ? &gdb_notifier.timeout : NULL);
!
! /* Clear the masks after an error from select. */
! if (num_found == -1)
! {
! FD_ZERO (&gdb_notifier.ready_masks[0]);
! FD_ZERO (&gdb_notifier.ready_masks[1]);
! FD_ZERO (&gdb_notifier.ready_masks[2]);
! /* Dont print anything is we got a signal, let gdb handle it. */
! if (errno != EINTR)
! perror_with_name ("Select");
! }
#endif /* HAVE_POLL */
/* Enqueue all detected file events. */
#ifdef HAVE_POLL
! for (i = 0; (i < gdb_notifier.num_fds) && (num_found > 0); i++)
! {
! if ((gdb_notifier.poll_fds + i)->revents)
! num_found--;
! else
! continue;
for (file_ptr = gdb_notifier.first_file_handler;
! file_ptr != NULL;
file_ptr = file_ptr->next_file)
{
! if (file_ptr->fd == (gdb_notifier.poll_fds + i)->fd)
! break;
! }
! if (file_ptr)
! {
/* Enqueue an event only if this is still a new event for
this fd. */
if (file_ptr->ready_mask == 0)
{
file_event_ptr = create_file_event (file_ptr->fd);
async_queue_event (file_event_ptr, TAIL);
}
}
-
- file_ptr->ready_mask = (gdb_notifier.poll_fds + i)->revents;
- }
-
- #else /* ! HAVE_POLL */
-
- for (file_ptr = gdb_notifier.first_file_handler;
- (file_ptr != NULL) && (num_found > 0);
- file_ptr = file_ptr->next_file)
- {
- int mask = 0;
-
- if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[0]))
- mask |= GDB_READABLE;
- if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[1]))
- mask |= GDB_WRITABLE;
- if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[2]))
- mask |= GDB_EXCEPTION;
-
- if (!mask)
- continue;
- else
- num_found--;
-
- /* Enqueue an event only if this is still a new event for
- this fd. */
-
- if (file_ptr->ready_mask == 0)
- {
- file_event_ptr = create_file_event (file_ptr->fd);
- async_queue_event (file_event_ptr, TAIL);
- }
- file_ptr->ready_mask = mask;
}
-
- #endif /* HAVE_POLL */
-
return 0;
}
--- 767,880 ----
if (gdb_notifier.num_fds == 0)
return -1;
+ if (use_poll)
+ {
#ifdef HAVE_POLL
! num_found =
! poll (gdb_notifier.poll_fds,
! (unsigned long) gdb_notifier.num_fds,
! gdb_notifier.timeout_valid ? gdb_notifier.poll_timeout : -1);
!
! /* Don't print anything if we get out of poll because of a
! signal. */
! if (num_found == -1 && errno != EINTR)
! perror_with_name ("Poll");
! #else
! internal_error ("event-loop.c : use_poll without HAVE_POLL");
#endif /* HAVE_POLL */
+ }
+ else
+ {
+ gdb_notifier.ready_masks[0] = gdb_notifier.check_masks[0];
+ gdb_notifier.ready_masks[1] = gdb_notifier.check_masks[1];
+ gdb_notifier.ready_masks[2] = gdb_notifier.check_masks[2];
+ num_found = select (gdb_notifier.num_fds,
+ & gdb_notifier.ready_masks[0],
+ & gdb_notifier.ready_masks[1],
+ & gdb_notifier.ready_masks[2],
+ gdb_notifier.timeout_valid
+ ? &gdb_notifier.select_timeout : NULL);
+
+ /* Clear the masks after an error from select. */
+ if (num_found == -1)
+ {
+ FD_ZERO (&gdb_notifier.ready_masks[0]);
+ FD_ZERO (&gdb_notifier.ready_masks[1]);
+ FD_ZERO (&gdb_notifier.ready_masks[2]);
+ /* Dont print anything is we got a signal, let gdb handle it. */
+ if (errno != EINTR)
+ perror_with_name ("Select");
+ }
+ }
/* Enqueue all detected file events. */
+ if (use_poll)
+ {
#ifdef HAVE_POLL
+ for (i = 0; (i < gdb_notifier.num_fds) && (num_found > 0); i++)
+ {
+ if ((gdb_notifier.poll_fds + i)->revents)
+ num_found--;
+ else
+ continue;
! for (file_ptr = gdb_notifier.first_file_handler;
! file_ptr != NULL;
! file_ptr = file_ptr->next_file)
! {
! if (file_ptr->fd == (gdb_notifier.poll_fds + i)->fd)
! break;
! }
!
! if (file_ptr)
! {
! /* Enqueue an event only if this is still a new event for
! this fd. */
! if (file_ptr->ready_mask == 0)
! {
! file_event_ptr = create_file_event (file_ptr->fd);
! async_queue_event (file_event_ptr, TAIL);
! }
! }
+ file_ptr->ready_mask = (gdb_notifier.poll_fds + i)->revents;
+ }
+ #else
+ internal_error ("event-loop.c : use_poll without HAVE_POLL");
+ #endif /* HAVE_POLL */
+ }
+ else
+ {
for (file_ptr = gdb_notifier.first_file_handler;
! (file_ptr != NULL) && (num_found > 0);
file_ptr = file_ptr->next_file)
{
! int mask = 0;
! if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[0]))
! mask |= GDB_READABLE;
! if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[1]))
! mask |= GDB_WRITABLE;
! if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[2]))
! mask |= GDB_EXCEPTION;
!
! if (!mask)
! continue;
! else
! num_found--;
!
/* Enqueue an event only if this is still a new event for
this fd. */
+
if (file_ptr->ready_mask == 0)
{
file_event_ptr = create_file_event (file_ptr->fd);
async_queue_event (file_event_ptr, TAIL);
}
+ file_ptr->ready_mask = mask;
}
}
return 0;
}
***************
*** 1125,1136 ****
/* Now we need to update the timeout for select/ poll, because we
don't want to sit there while this timer is expiring. */
#ifdef HAVE_POLL
! gdb_notifier.timeout = delta.tv_sec * 1000;
#else
! gdb_notifier.timeout.tv_sec = delta.tv_sec;
! gdb_notifier.timeout.tv_usec = delta.tv_usec;
! #endif
gdb_notifier.timeout_valid = 1;
}
else
--- 1156,1174 ----
/* Now we need to update the timeout for select/ poll, because we
don't want to sit there while this timer is expiring. */
+ if (use_poll)
+ {
#ifdef HAVE_POLL
! gdb_notifier.poll_timeout = delta.tv_sec * 1000;
#else
! internal_error ("event-loop.c : use_poll without HAVE_POLL");
! #endif /* HAVE_POLL */
! }
! else
! {
! gdb_notifier.select_timeout.tv_sec = delta.tv_sec;
! gdb_notifier.select_timeout.tv_usec = delta.tv_usec;
! }
gdb_notifier.timeout_valid = 1;
}
else
Index: ChangeLog
===================================================================
RCS file: /cvs/src/src/gdb/ChangeLog,v
retrieving revision 1.164
diff -c -r1.164 ChangeLog
*** ChangeLog 2000/03/22 20:55:15 1.164
--- ChangeLog 2000/03/23 03:42:24
***************
*** 1,3 ****
--- 1,17 ----
+ 2000-03-22 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
+
+ From Philippe De Muyter <phdm@macqel.be>
+
+ * event-loop.c (sys/types.h): File now included unconditionally.
+ (use_poll): New variable..
+ (gdb_notifier): poll- and select-versions merged.
+ (add_file_handler): If HAVE_POLL, check whether poll is usable,
+ and reset `use_poll' if not.
+ (create_file_handler): Select poll- or select-version according to
+ `use_poll'.
+ (delete_file_handler, handle_file_event): Likewise.
+ (gdb_wait_for_event, poll_timers): Likewise.
+
2000-03-22 Peter Schauer <pes@regent.e-technik.tu-muenchen.de>
* printcmd.c (print_scalar_formatted): Truncate addresses to the