Re: "The target is not responding to interrupt requests" after re-attach

Dmitry Antipov <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
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 ().

Dmitry
gdbserver_sigio_fix.patch (text/x-patch, 976 B)
diff --git a/gdb/gdbserver/remote-utils.c b/gdb/gdbserver/remote-utils.c
index 66e065225b..f686debeaa 100644
--- a/gdb/gdbserver/remote-utils.c
+++ b/gdb/gdbserver/remote-utils.c
@@ -92,6 +92,7 @@ static int readchar_callback = NOT_SCHEDULED;
 static int readchar (void);
 static void reset_readchar (void);
 static void reschedule (void);
+static void input_interrupt (int);
 
 /* A cache entry for a successfully looked-up symbol.  */
 struct sym_cache
@@ -149,6 +150,10 @@ enable_async_notification (int fd)
   fcntl (fd, F_SETOWN, getpid ());
 #endif
 #endif
+  /* Install SIGIO handler.  */
+#ifndef USE_WIN32API
+  signal (SIGIO, input_interrupt);
+#endif
 }
 
 static int
@@ -859,11 +864,6 @@ initialize_async_io (void)
   /* Make sure that async I/O starts blocked.  */
   async_io_enabled = 1;
   disable_async_io ();
-
-  /* Install the signal handler.  */
-#ifndef USE_WIN32API
-  signal (SIGIO, input_interrupt);
-#endif
 }
 
 /* Internal buffer used by readchar.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.