public inbox for insight@sourceware.org
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@false.org>
To: Andrew STUBBS <andrew.stubbs@st.com>
Cc: Mark Kettenis <mark.kettenis@xs4all.nl>,
	gdb-patches@sourceware.org, 	insight@sourceware.org
Subject: Re: [PATCH] Don't call Insight hooks when not appropriate
Date: Sat, 25 Mar 2006 00:04:00 -0000	[thread overview]
Message-ID: <20060325000428.GH26748@nevyn.them.org> (raw)
In-Reply-To: <44115FE2.4070206@st.com>

On Fri, Mar 10, 2006 at 11:15:46AM +0000, Andrew STUBBS wrote:
> Daniel Jacobowitz wrote:
> >On Thu, Mar 09, 2006 at 08:10:56PM +0100, Mark Kettenis wrote:
> >>>Date: Thu, 09 Mar 2006 15:37:22 +0000
> >>>From: Andrew STUBBS <andrew.stubbs@st.com>
> >>>
> >>>2006-03-09  Andrew Stubbs  <andrew.stubbs@st.com>
> >>>
> >>>	* cli/cli-script.c (execute_user_command): Set instream to -1, not 0.
> >>>	(read_command_lines): Check instream before calling the prompt hook.
> >>I think this usage of -1 is a bad idea.
> >
> >Me too.  We're already using a global variable; why not just add
> >another and restore it in the same cleanup?
> 
> I don't really mind, as long as it works.
> 
> How would you like it done?

Does something like this work?  Fixes a nasty cleanups bug in user
commands at the same time.

Index: top.c
===================================================================
RCS file: /cvs/src/src/gdb/top.c,v
retrieving revision 1.113
diff -u -p -r1.113 top.c
--- top.c	10 Feb 2006 22:01:43 -0000	1.113
+++ top.c	25 Mar 2006 00:03:23 -0000
@@ -112,6 +112,10 @@ Whether to confirm potentially dangerous
 
 FILE *instream;
 
+/* Flag to indicate whether a user defined command is currently running.  */
+
+int in_user_command;
+
 /* Current working directory.  */
 
 char *current_directory;
Index: top.h
===================================================================
RCS file: /cvs/src/src/gdb/top.h,v
retrieving revision 1.12
diff -u -p -r1.12 top.h
--- top.h	17 Dec 2005 22:34:03 -0000	1.12
+++ top.h	25 Mar 2006 00:03:23 -0000
@@ -27,6 +27,7 @@
 extern char *line;
 extern int linesize;
 extern FILE *instream;
+extern int in_user_command;
 extern char gdb_dirbuf[1024];
 extern int inhibit_gdbinit;
 extern int epoch_interface;
Index: cli/cli-script.c
===================================================================
RCS file: /cvs/src/src/gdb/cli/cli-script.c,v
retrieving revision 1.32
diff -u -p -r1.32 cli-script.c
--- cli/cli-script.c	17 Dec 2005 22:40:17 -0000	1.32
+++ cli/cli-script.c	25 Mar 2006 00:03:23 -0000
@@ -241,9 +241,9 @@ static void
 do_restore_user_call_depth (void * call_depth)
 {	
   int * depth = call_depth;
-  /* We will be returning_to_top_level() at this point, so we want to
-     reset our depth. */
-  (*depth) = 0;
+  (*depth)--;
+  if ((*depth) == 0)
+    in_user_command = 0;
 }
 
 
@@ -266,12 +266,17 @@ execute_user_command (struct cmd_list_el
   if (++user_call_depth > max_user_call_depth)
     error (_("Max user call depth exceeded -- command aborted."));
 
-  old_chain = make_cleanup (do_restore_user_call_depth, &user_call_depth);
+  make_cleanup (do_restore_user_call_depth, &user_call_depth);
 
   /* Set the instream to 0, indicating execution of a
      user-defined function.  */
-  old_chain = make_cleanup (do_restore_instream_cleanup, instream);
+  make_cleanup (do_restore_instream_cleanup, instream);
   instream = (FILE *) 0;
+
+  /* Also set the global in_user_command, so that NULL instream is
+     not confused with Insight.  */
+  in_user_command = 1;
+
   while (cmdlines)
     {
       ret = execute_control_command (cmdlines);
@@ -283,8 +288,6 @@ execute_user_command (struct cmd_list_el
       cmdlines = cmdlines->next;
     }
   do_cleanups (old_chain);
-
-  user_call_depth--;
 }
 
 enum command_control_type
Index: gdbtk/generic/gdbtk-hooks.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-hooks.c,v
retrieving revision 1.41
diff -u -p -r1.41 gdbtk-hooks.c
--- gdbtk/generic/gdbtk-hooks.c	23 Dec 2005 18:23:16 -0000	1.41
+++ gdbtk/generic/gdbtk-hooks.c	25 Mar 2006 00:03:23 -0000
@@ -486,6 +486,9 @@ gdbtk_readline_begin (char *format,...)
   va_list args;
   char *buf;
 
+  if (instream != NULL || in_user_command)
+    return;
+
   va_start (args, format);
   xvasprintf (&buf, format, args);
   gdbtk_two_elem_cmd ("gdbtk_tcl_readline_begin", buf);
@@ -497,6 +500,9 @@ gdbtk_readline (char *prompt)
 {
   int result;
 
+  if (instream != NULL || in_user_command)
+    return;
+
 #ifdef _WIN32
   close_bfds ();
 #endif
@@ -518,6 +524,9 @@ gdbtk_readline (char *prompt)
 static void
 gdbtk_readline_end ()
 {
+  if (instream != NULL || in_user_command)
+    return;
+
   if (Tcl_Eval (gdbtk_interp, "gdbtk_tcl_readline_end") != TCL_OK)
     report_error ();
 }
@@ -682,6 +691,9 @@ gdbtk_query (const char *query, va_list 
   char *buf;
   long val;
 
+  if (instream != NULL || in_user_command)
+    return;
+
   xvasprintf (&buf, query, args);
   gdbtk_two_elem_cmd ("gdbtk_tcl_query", buf);
   free(buf);

-- 
Daniel Jacobowitz
CodeSourcery

  reply	other threads:[~2006-03-25  0:04 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-03-09 15:42 Andrew STUBBS
2006-03-09 19:11 ` Mark Kettenis
2006-03-09 19:13   ` Daniel Jacobowitz
2006-03-09 19:14     ` Daniel Jacobowitz
2006-03-09 20:20     ` Michael Snyder
2006-03-10 11:15       ` Andrew STUBBS
2006-03-10 11:18     ` Andrew STUBBS
2006-03-25  0:04       ` Daniel Jacobowitz [this message]
2006-03-27 11:32         ` Andrew STUBBS
2006-03-28 21:59           ` Daniel Jacobowitz
2006-03-29 15:43             ` Andrew STUBBS
2006-03-29 15:49               ` Daniel Jacobowitz
2006-03-29 15:58                 ` Andrew STUBBS
2006-03-29 16:29                   ` Daniel Jacobowitz
2006-03-29 16:38                     ` Andrew STUBBS
2006-03-29 16:45                       ` Dave Korn
2006-03-29 18:01                       ` Eli Zaretskii
2006-03-29 22:53                       ` Daniel Jacobowitz

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=20060325000428.GH26748@nevyn.them.org \
    --to=drow@false.org \
    --cc=andrew.stubbs@st.com \
    --cc=gdb-patches@sourceware.org \
    --cc=insight@sourceware.org \
    --cc=mark.kettenis@xs4all.nl \
    /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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).