Re: "The target is not responding to interrupt requests" after re-attach
Pedro Alves <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <[email protected]> |
On 10/19/2017 12:57 PM, Dmitry Antipov wrote:
> On 10/19/2017 02:39 PM, Pedro Alves wrote:
>
>> No good reason. Sounds like you found a bug.
>
> 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.
>
> Probably the fix is to (re)install SIGIO handler each time when a new
> async-served descriptor gets hooked into an event loop, for example,
> in enable_async_notification ().
Thanks much for tracking that down.
We could instead not uninstall the handler in remote_close, but
block the signal instead, putting us back in the original
state? Like:
@@ -403,10 +403,7 @@ remote_close (void)
{
delete_file_handler (remote_desc);
-#ifndef USE_WIN32API
- /* Remove SIGIO handler. */
- signal (SIGIO, SIG_IGN);
-#endif
+ disable_async_io ();
I wrote a gdb testsuite/gdb.server/ test exposing this, and
sent a patch to the patches list, after running that through
the testsuite:
https://sourceware.org/ml/gdb-patches/2017-10/msg00606.html
Thanks,
Pedro Alves