Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Vladimir Prus <vladimir@codesourcery.com>
To: gdb-patches@sources.redhat.com
Subject: [RFA] Make attach_command exception-safe
Date: Fri, 29 Aug 2008 07:11:00 -0000	[thread overview]
Message-ID: <200808291110.43091.vladimir@codesourcery.com> (raw)


When attach_command executes, it might disable stdin. It further might
throw, and does not enable stdin in that case. For CLI case, top-level
event loop will catch the exception and enable stdin. For MI case, MI
interpreter catches the exception in order to print the error message,
and of course it has no idea about any stdin disabling.

This patch makes attach_command exception-safe, enabling stdin on
throw.

OK?

- Volodya

	* infcmd.c (attach_command): Call async_enable_stdin
	if exception is thrown.

---
 ChangeLog.csl |    6 ++++++
 gdb/infcmd.c  |    4 ++++
 2 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/ChangeLog.csl b/ChangeLog.csl
index 9f4f686..5699492 100644
--- a/ChangeLog.csl
+++ b/ChangeLog.csl
@@ -1,3 +1,9 @@
+2008-08-28  Vladimir Prus  <vladimir@codesourcery.com>
+
+	Make attach_command exception-safe
+        * infcmd.c (attach_command): Call async_enable_stdin
+        if exception is thrown.
+
 2008-08-19  Pedro Alves  <pedro@codesourcery.com>
 
 	* infcmd.c (post_create_inferior_1): If the solist is global,
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index feb045a..f0d3a6f 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -2084,6 +2084,7 @@ attach_command (char *args, int from_tty)
   char *exec_file;
   char *full_exec_path = NULL;
   int async_exec = 0;
+  struct cleanup *back_to = make_cleanup (null_cleanup, NULL);
 
   dont_repeat ();		/* Not for the faint of heart */
 
@@ -2139,6 +2140,7 @@ attach_command (char *args, int from_tty)
     {
       /* Simulate synchronous execution */
       async_disable_stdin ();
+      make_cleanup ((make_cleanup_ftype *)async_enable_stdin, NULL);
     }
 
   target_attach (args, from_tty);
@@ -2181,6 +2183,7 @@ attach_command (char *args, int from_tty)
 	  add_continuation (inferior_thread (),
 			    attach_command_continuation, a,
 			    attach_command_continuation_free_args);
+	  discard_cleanups (back_to);
 	  return;
 	}
 
@@ -2188,6 +2191,7 @@ attach_command (char *args, int from_tty)
     }
 
   attach_command_post_wait (args, from_tty, async_exec);
+  discard_cleanups (back_to);
 }
 
 /*
-- 
1.5.3.5


             reply	other threads:[~2008-08-29  7:11 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-29  7:11 Vladimir Prus [this message]
2008-08-29 15:23 ` Daniel Jacobowitz
2008-11-03 21:08   ` Vladimir Prus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200808291110.43091.vladimir@codesourcery.com \
    --to=vladimir@codesourcery.com \
    --cc=gdb-patches@sources.redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox