GDBserver: Fix ignored Ctrl-C after reconnection
authorPedro Alves <palves@redhat.com>
Thu, 16 Nov 2017 14:58:51 +0000 (14:58 +0000)
committerPedro Alves <palves@redhat.com>
Thu, 16 Nov 2017 14:58:51 +0000 (14:58 +0000)
commite849ea896bcdc3da8caff02eb6dc91dc85dd8a7e
treec5eeabea2f3acb6c229627e80a9bb6b9d40f026d
parent80a0437873045cc08753fcac4af154e2931a99fd
GDBserver: Fix ignored Ctrl-C after reconnection

This fixes the issue reported by Dmitry Antipov <dantipov@nvidia.com>
here:
  https://sourceware.org/ml/gdb/2017-10/msg00048.html

The problem is that GDBserver stops listening to Ctrl-C/interrupt
requests if you disconnect and reconnect back.

Dmitry wrote:

~~~
Currently gdbserver installs SIGIO handler just once, in
initialize_async_io() called from captured_main(), and this handler is
removed when remote_desc is closed in remote_close().  Next, when a
new instance of remote_desc is fetched from accept() and has '\003'
arrived, input_interrupt() is never called because it is not
registered as SIGIO handler.
~~~

The fix here is not remove the SIGIO handler in the first place, thus
going back to the original before-first-connection state.

(I haven't gone back to try it, but I think this was a regression
caused by commit 8b2073398477 ("[GDBserver] Block and unblock SIGIO"),
which was what made remote_close remove the signal handler.)

New test included.

gdb/gdbserver/ChangeLog:
2017-11-16  Pedro Alves  <palves@redhat.com>

* remote-utils.c (remote_close): Block SIGIO signals instead of
uninstalling the SIGIO handler.

gdb/testsuite/ChangeLog:
2017-11-16  Pedro Alves  <palves@redhat.com>

* gdb.server/reconnect-ctrl-c.c: New file.
* gdb.server/reconnect-ctrl-c.exp: New file.
gdb/gdbserver/ChangeLog
gdb/gdbserver/remote-utils.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.server/reconnect-ctrl-c.c [new file with mode: 0644]
gdb/testsuite/gdb.server/reconnect-ctrl-c.exp [new file with mode: 0644]