Reviewed by Daniel Jacobowitz <drow@false.org>
authorFred Fish <fnf@specifix.com>
Thu, 8 Feb 2007 16:25:25 +0000 (16:25 +0000)
committerFred Fish <fnf@specifix.com>
Thu, 8 Feb 2007 16:25:25 +0000 (16:25 +0000)
2008-02-08  Fred Fish  <fnf@specifix.com>
* event-top.c (handle_sigint): Set quit_flag.
(async_request_quit): Don't set quit_flag.  Avoid calling quit()
if quit_flag has already been reset.

gdb/ChangeLog
gdb/event-top.c

index cfb9cdbc61da0dae0901018d4873d18123516e34..51f64d98a828be79644277ad43e588d2bb3530cf 100644 (file)
@@ -1,3 +1,9 @@
+2008-02-08  Fred Fish  <fnf@specifix.com>
+
+       * event-top.c (handle_sigint): Set quit_flag.
+       (async_request_quit): Don't set quit_flag.  Avoid calling quit()
+       if quit_flag has already been reset.
+
 2007-02-08  Daniel Jacobowitz  <dan@codesourcery.com>
 
        * ser-mingw.c (pipe_windows_close): Move variable initialization back
index 400c8127a613b1d54851eeb5b0982496f25aec2a..9a6c2fbc1841e67d40c723bbc55dfe08489a75a6 100644 (file)
@@ -961,6 +961,13 @@ handle_sigint (int sig)
 {
   signal (sig, handle_sigint);
 
+  /* We could be running in a loop reading in symfiles or something so
+     it may be quite a while before we get back to the event loop.  So
+     set quit_flag to 1 here. Then if QUIT is called before we get to
+     the event loop, we will unwind as expected.  */
+
+  quit_flag = 1;
+
   /* If immediate_quit is set, we go ahead and process the SIGINT right
      away, even if we usually would defer this to the event loop. The
      assumption here is that it is safe to process ^C immediately if
@@ -989,7 +996,14 @@ handle_sigterm (int sig)
 void
 async_request_quit (gdb_client_data arg)
 {
-  quit_flag = 1;
+  /* If the quit_flag has gotten reset back to 0 by the time we get
+     back here, that means that an exception was thrown to unwind
+     the current command before we got back to the event loop.  So
+     there is no reason to call quit again here. */
+
+  if (quit_flag == 0)
+    return;
+
   quit ();
 }