Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Jan Kratochvil <jan.kratochvil@redhat.com>
To: Pedro Alves <pedro@codesourcery.com>
Cc: gdb-patches@sourceware.org
Subject: [patch] Code cleanup: Remove commands_left  [Do not bpstat_clear_actions on throw_exception]
Date: Thu, 18 Aug 2011 19:05:00 -0000	[thread overview]
Message-ID: <20110818190440.GA6072@host1.jankratochvil.net> (raw)
In-Reply-To: <201108181742.19980.pedro@codesourcery.com>

On Thu, 18 Aug 2011 18:42:19 +0200, Pedro Alves wrote:
> Since bs->commands is refcounted, I don't understand
> why we need bs->commands_left at all.  bpstat_do_actions_1
> could instead itself skip the first command if it is "silent".

To make the discussion easier let's remove it first.

The patch is simple, I will check it in soon myself.
No regressions on {x86_64,x86_64-m32,i686}-fedora16pre-linux-gnu.


Thanks,
Jan


gdb/
2011-08-18  Jan Kratochvil  <jan.kratochvil@redhat.com>

	Code cleanup.
	* breakpoint.c (bpstat_clear_actions): Remove clearing of commands_left.
	(command_line_is_silent): New function.
	(bpstat_do_actions_1): No longer use commands_left, use
	command_line_is_silent for commands.
	(bpstat_alloc): Remove clearing of commands_left.
	(bpstat_stop_status): Remove initialization of commands_left, use
	command_line_is_silent.
	* breakpoint.h (struct bpstats): Remove commands_left.

--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -3194,7 +3194,7 @@ bpstat_clear_actions (bpstat bs)
   for (; bs != NULL; bs = bs->next)
     {
       decref_counted_command_line (&bs->commands);
-      bs->commands_left = NULL;
+
       if (bs->old_val != NULL)
 	{
 	  value_free (bs->old_val);
@@ -3231,6 +3231,16 @@ cleanup_executing_breakpoints (void *ignore)
   executing_breakpoint_commands = 0;
 }
 
+/* Return non-zero iff CMD as the first line of a command sequence is `silent'
+   or its equivalent.  */
+
+static int
+command_line_is_silent (struct command_line *cmd)
+{
+  return cmd && (strcmp ("silent", cmd->line) == 0
+		 || (xdb_commands && strcmp ("Q", cmd->line) == 0));
+}
+
 /* Execute all the commands associated with all the breakpoints at
    this location.  Any of these commands could cause the process to
    proceed beyond this point, etc.  We look out for such changes by
@@ -3279,10 +3289,13 @@ bpstat_do_actions_1 (bpstat *bsp)
          the tree when we're done.  */
       ccmd = bs->commands;
       bs->commands = NULL;
-      this_cmd_tree_chain
-	= make_cleanup_decref_counted_command_line (&ccmd);
-      cmd = bs->commands_left;
-      bs->commands_left = NULL;
+      this_cmd_tree_chain = make_cleanup_decref_counted_command_line (&ccmd);
+      cmd = ccmd ? ccmd->commands : NULL;
+      if (command_line_is_silent (cmd))
+	{
+	  /* The action has been already done by bpstat_stop_status.  */
+	  cmd = cmd->next;
+	}
 
       while (cmd != NULL)
 	{
@@ -3474,7 +3487,6 @@ bpstat_alloc (struct bp_location *bl, bpstat **bs_link_pointer)
   incref_bp_location (bl);
   /* If the condition is false, etc., don't do the commands.  */
   bs->commands = NULL;
-  bs->commands_left = NULL;
   bs->old_val = NULL;
   bs->print_it = print_it_normal;
   return bs;
@@ -4151,16 +4163,9 @@ bpstat_stop_status (struct address_space *aspace,
 		bs->print = 0;
 	      bs->commands = b->commands;
 	      incref_counted_command_line (bs->commands);
-	      bs->commands_left = bs->commands ? bs->commands->commands : NULL;
-	      if (bs->commands_left
-		  && (strcmp ("silent", bs->commands_left->line) == 0
-		      || (xdb_commands
-			  && strcmp ("Q",
-				     bs->commands_left->line) == 0)))
-		{
-		  bs->commands_left = bs->commands_left->next;
-		  bs->print = 0;
-		}
+	      if (command_line_is_silent (bs->commands
+					  ? bs->commands->commands : NULL))
+		bs->print = 0;
 	    }
 
 	  /* Print nothing for this entry if we don't stop or don't print.  */
--- a/gdb/breakpoint.h
+++ b/gdb/breakpoint.h
@@ -950,10 +950,6 @@ struct bpstats
     /* The associated command list.  */
     struct counted_command_line *commands;
 
-    /* Commands left to be done.  This points somewhere in
-       base_command.  */
-    struct command_line *commands_left;
-
     /* Old value associated with a watchpoint.  */
     struct value *old_val;
 


  reply	other threads:[~2011-08-18 19:05 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-05 20:14 [patch] Do not bpstat_clear_actions on throw_exception Jan Kratochvil
2011-08-08 15:44 ` Pedro Alves
2011-08-18 15:34   ` Jan Kratochvil
2011-08-18 16:42     ` Pedro Alves
2011-08-18 19:05       ` Jan Kratochvil [this message]
2011-08-21 14:34         ` [patch] Code cleanup: Remove commands_left [Do not bpstat_clear_actions on throw_exception] Jan Kratochvil
2011-08-22 14:52       ` [patch 1/2] Code reshuffle for patch 2/2 [Re: [patch] Do " Jan Kratochvil
2011-08-26  9:29         ` Jan Kratochvil
2011-08-26 12:07           ` Pedro Alves

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=20110818190440.GA6072@host1.jankratochvil.net \
    --to=jan.kratochvil@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=pedro@codesourcery.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