gdbserver/linux: Always wake up event loop after resume
authorPedro Alves <palves@redhat.com>
Mon, 30 Nov 2015 16:05:26 +0000 (16:05 +0000)
committerPedro Alves <palves@redhat.com>
Mon, 30 Nov 2015 18:45:23 +0000 (18:45 +0000)
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  <palves@redhat.com>

* linux-low.c (linux_resume): Wake up the event loop before
returning.

gdb/gdbserver/ChangeLog
gdb/gdbserver/linux-low.c

index 86ca7367d69fa17b70ea2d82eebb61d56a15493b..6330c03236bd65ed88d782cec0b1cf5c1751a287 100644 (file)
@@ -1,3 +1,8 @@
+2015-11-30  Pedro Alves  <palves@redhat.com>
+
+       * linux-low.c (linux_resume): Wake up the event loop before
+       returning.
+
 2015-11-30  Pedro Alves  <palves@redhat.com>
 
        * mem-break.c (check_gdb_bp_preconditions): Remove current_thread
index 28abe418da4bc9a995c9d45ca10856f59bc9a4da..086b202d9448a1c05142ebb399bb786ee8f98eb3 100644 (file)
@@ -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