diff options
author | Pedro Alves <palves@redhat.com> | 2015-05-15 16:26:53 +0100 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2015-05-15 16:26:53 +0100 |
commit | 4e63d0ac896b6036edd8e2c09a4dac7aa16a46d1 (patch) | |
tree | cf9a40558ffa3b91f6b42609f147aa664c7458a1 /gas | |
parent | 452003ef2ca3e1cf81b17d960b59b8a8c167054b (diff) | |
download | gdb-4e63d0ac896b6036edd8e2c09a4dac7aa16a46d1.zip gdb-4e63d0ac896b6036edd8e2c09a4dac7aa16a46d1.tar.gz gdb-4e63d0ac896b6036edd8e2c09a4dac7aa16a46d1.tar.bz2 |
Fix gdb.mi/mi-nsmoribund.exp timeouts
The PPC64 buildbot has been showing timeouts in mi-nsmoribund.exp,
like this:
(...)
-thread-info
FAIL: gdb.mi/mi-nsmoribund.exp: thread state: all running except the breakpoint thread (timeout)
... and I can reproduce this on gcc110 (PPC64) on the gcc compile
farm.
That is, the test sends "-thread-info" to GDB, but GDB never replies
back.
The problem is that these machines are too fast for gdb. :-)
That test has a few threads running the same tight loop, and
constantly hitting a thread-specific breakpoint that needs to be
stepped over. If threads trip on breakpoints fast enough that
linux-nat.c's event pipe associated with SIGCHLD is constantly being
written to, even if the stdin file descriptor also has an event to
handle, gdb never gets to it. because linux-nat.c's pipe comes first
in the set of descriptors served by the poll/select code in the event
loop.
Fix this by having the event loop serve file event sources in
round-robin-like fashion, similarly to how its done in
gdb_do_one_event.
Unfortunately, the poll and the select variants each need their own
fixing.
Tested on x86_64 Fedora 20 (poll and select variants), and PPC64
Fedora 18. Fixes the timeout in the PPC64 machine in the compile farm
that times out without this, and I won't be surprised if it fixes
other random timeouts in other tests.
(gdbserver's copy of the event-loop doesn't need this (yet), as it
still pushes all ready events to an event queue. That is, it hasn't
had 70b66289 merged yet. We should really merge both event-loop.c
copies into a single shared file, but that's for another day.)
gdb/ChangeLog:
2015-05-15 Pedro Alves <palves@redhat.com>
Simon Marchi <simon.marchi@ericsson.com>
* event-loop.c (gdb_notifier) <next_file_handler,
next_poll_fds_index>: New fields.
(get_next_file_handler_to_handle_and_advance): New function.
(delete_file_handler): If deleting the next file handler to
handle, advance to the next file handler.
(gdb_wait_for_event): Bail early if no event fired. Poll file
handlers in round-robin fashion.
Diffstat (limited to 'gas')
0 files changed, 0 insertions, 0 deletions