From 1bebeeca940f4f6339e66eb7fb486c81cd951522 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Mon, 30 Nov 2015 16:05:26 +0000 Subject: [PATCH] gdbserver/linux: Always wake up event loop after resume Running killed-outside.exp in with "maint set target-non-stop on" hangs currently. This test has the inferior process die with a SIGKILL while stopped. gdbserver gets a SIGCHLD and reacts by retrieveing the SIGKILL events out of waitpid. But because the process is not resumed from GDB's perspective, the event is left pending. When GDB resumes the process afterwards, the process is not really resumed because it already has the event pending. But nothing wakes up the event loop to consume the event. Handle this in the same way nat/linux-nat.c:linux_nat_resume handles this. gdb/gdbserver/ChangeLog: 2015-11-30 Pedro Alves * linux-low.c (linux_resume): Wake up the event loop before returning. --- gdb/gdbserver/ChangeLog | 5 +++++ gdb/gdbserver/linux-low.c | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 86ca7367d6..6330c03236 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,8 @@ +2015-11-30 Pedro Alves + + * linux-low.c (linux_resume): Wake up the event loop before + returning. + 2015-11-30 Pedro Alves * mem-break.c (check_gdb_bp_preconditions): Remove current_thread diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c index 28abe418da..086b202d94 100644 --- a/gdb/gdbserver/linux-low.c +++ b/gdb/gdbserver/linux-low.c @@ -4770,6 +4770,11 @@ linux_resume (struct thread_resume *resume_info, size_t n) debug_printf ("linux_resume done\n"); debug_exit (); } + + /* We may have events that were pending that can/should be sent to + the client now. Trigger a linux_wait call. */ + if (target_is_async_p ()) + async_file_mark (); } /* This function is called once per thread. We check the thread's -- 2.34.1