Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [RFA/RFC] QUIT doesn't seem to be working !?
@ 2003-08-12 22:22 Joel Brobecker
  2003-08-28 14:41 ` Daniel Jacobowitz
  2004-02-18 20:46 ` Elena Zannoni
  0 siblings, 2 replies; 12+ messages in thread
From: Joel Brobecker @ 2003-08-12 22:22 UTC (permalink / raw)
  To: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 1362 bytes --]

Hello,

it's bizarre, we noticed that we were unable to interrupt certain
commands that can be time greedy. For instance, when messing up in the
addresses given to the "disass" command, it can take GDB a loooooong
time to print all instructions. Unexpectedly, hitting Control-C did not
interrupt the command.

I see in disassemble_command() that there is a call to QUIT in the while
loop that prints all instructions. But this macro tests for quit_flag
to see if we should stop now or not. However, handle_sigint() does
not set this flag when Control-C is pressed, unless immediate_quit is
set. But immediate_quit is not really what we are looking for, because
it tells GDB that SIGINT events should be processed immediately, which
obviously means that GDB does not wait for the next call to QUIT to
perform the abortion.

So far, what handle_sigint() does is set the "ready" flag in GDB's
SIGINT async signal handler. This flag seems to take effect only
at the top-level loop level. So in our case, its effect arrives too
late.

So I couldn't understand how QUIT was working....

I applied the following change, which allows GDB to aboart at QUIT
points if the user has pressed C-c. But I feel like I'm missing
something...

2003-08-12  J. Brobecker  <brobecker@gnat.com>

        * event-top.c (handle_sigint): Set quit_flag.

Comments? Ok to apply?

-- 
Joel

[-- Attachment #2: event-top.c.diff --]
[-- Type: text/plain, Size: 974 bytes --]

Index: event-top.c
===================================================================
RCS file: /nile.c/cvs/Dev/gdb/gdb-5.3/gdb/event-top.c,v
retrieving revision 1.1
diff -u -p -r1.1 event-top.c
--- event-top.c	16 Jan 2003 09:46:22 -0000	1.1
+++ event-top.c	12 Aug 2003 21:27:57 -0000
@@ -967,9 +967,14 @@ handle_sigint (int sig)
   if (immediate_quit)
     async_request_quit (0);
   else
-    /* If immediate quit is not set, we process SIGINT the next time
-       through the loop, which is fine. */
-    mark_async_signal_handler_wrapper (sigint_token);
+    {
+      /* If immediate quit is not set, we process SIGINT the next time
+         through the loop, which is fine. */
+      mark_async_signal_handler_wrapper (sigint_token);
+      /* We can also process the signal at certain specific locations
+         which are explicitely marked by a call to QUIT.  */
+      quit_flag = 1;
+    }
 }
 
 /* Do the quit. All the checks have been done by the caller. */

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2004-02-26 17:32 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-08-12 22:22 [RFA/RFC] QUIT doesn't seem to be working !? Joel Brobecker
2003-08-28 14:41 ` Daniel Jacobowitz
2003-11-17  1:00   ` Daniel Jacobowitz
2004-01-19 16:24   ` Daniel Jacobowitz
2004-02-18 20:46 ` Elena Zannoni
2004-02-20 16:14   ` Andrew Cagney
2004-02-20 17:09     ` Joel Brobecker
2004-02-20 17:51       ` Andrew Cagney
2004-02-26 17:04         ` Daniel Jacobowitz
2004-02-26 17:32           ` Joel Brobecker
2004-02-20 17:06   ` Joel Brobecker
2004-02-23 15:15     ` Elena Zannoni

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox