* event-loop.c (create_file_handler): Don't do anything but

update data when we are given a fd which we are already
        monitoring.
This commit is contained in:
Keith Seitz 2002-05-14 15:21:10 +00:00
parent db5897415c
commit 05a6c72cef
2 changed files with 48 additions and 41 deletions

View File

@ -1,3 +1,9 @@
2002-05-14 Keith Seitz <keiths@redhat.com>
* event-loop.c (create_file_handler): Don't do anything but
update data when we are given a fd which we are already
monitoring.
2002-05-14 Michal Ludvig <mludvig@suse.cz>
* dwarf2cfi.c (context_cpy): Copy registers correctly.

View File

@ -494,51 +494,52 @@ create_file_handler (int fd, int mask, handler_func * proc, gdb_client_data clie
file_ptr->ready_mask = 0;
file_ptr->next_file = gdb_notifier.first_file_handler;
gdb_notifier.first_file_handler = file_ptr;
if (use_poll)
{
#ifdef HAVE_POLL
gdb_notifier.num_fds++;
if (gdb_notifier.poll_fds)
gdb_notifier.poll_fds =
(struct pollfd *) xrealloc (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 (__FILE__, __LINE__,
"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;
}
}
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 *) xrealloc (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 (__FILE__, __LINE__,
"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: