[RFA] deleting breakpoints inside of 'commands' [Repost]

Don Howard dhoward@redhat.com
Thu Sep 20 15:24:00 GMT 2001


Here is a patch that I hope will satisfy all sides.  The patch below
changes free_command_lines() to check if we are currently
'executing_breakpoint_commands'.  If so, the command list is appended to
a list of 'orphaned_command_lines'.  When the execution of the command
list completes, the orphaned_command_lines are then deleted.

Should I make the global variables static and add accessor/mutator
functions?  What is the policy on globals?

Comments?



2001-09-20  Don Howard  <dhoward@redhat.com>

	* cli/cli-script.c (free_command_lines): Avoid deleting
	command_line lists while executing that list.
	* breakpoint.c: (executing_breakpoint_commands): Make this
	global visible to other compilation units.
	(orphaned_breakpoint_commands) New global.
	(bpstat_do_actions): Free orphaned command_line structures once
	done executing them.


Index: gdb/breakpoint.c
===================================================================
RCS file: /cvs/src/src/gdb/breakpoint.c,v
retrieving revision 1.53
diff -p -u -w -r1.53 breakpoint.c
--- breakpoint.c	2001/09/18 05:00:48	1.53
+++ breakpoint.c	2001/09/20 22:18:17
@@ -221,8 +221,11 @@ extern int addressprint;	/* Print machin
 static int internal_breakpoint_number = -1;

 /* Are we executing breakpoint commands?  */
-static int executing_breakpoint_commands;
+int executing_breakpoint_commands;

+/* List of breakpoint commands to be cleaned up after we are done executing them. */
+struct command_line * orphaned_breakpoint_commands;
+
 /* Walk the following statement or block through all breakpoints.
    ALL_BREAKPOINTS_SAFE does so even if the statment deletes the current
    breakpoint.  */
@@ -1845,6 +1848,7 @@ top:
     }

   executing_breakpoint_commands = 0;
+  free_command_lines (&orphaned_breakpoint_commands);
   discard_cleanups (old_chain);
 }

Index: gdb/cli/cli-script.c
===================================================================
RCS file: /cvs/src/src/gdb/cli/cli-script.c,v
retrieving revision 1.7
diff -p -u -w -r1.7 cli-script.c
--- cli-script.c	2001/06/17 15:16:12	1.7
+++ cli-script.c	2001/09/20 22:18:17
@@ -1014,7 +1014,25 @@ free_command_lines (struct command_line
   register struct command_line *next;
   struct command_line **blist;
   int i;
+  extern int executing_breakpoint_commands;
+  extern struct command_line * orphaned_breakpoint_commands;

+  /* Avoid deleting command_line lists while executing that list. */
+  if (executing_breakpoint_commands)
+    {
+      struct command_line **b = NULL;
+
+      /* Find the end of the orphaned_breakpoint_commands list */
+      for (b = &orphaned_breakpoint_commands; *b; b = &((*b)->next))
+	/* Nothing */
+	;
+
+      /* Append the passed-in list */
+      *b = *lptr;
+      *lptr = NULL;
+      return;
+    }
+
   while (l)
     {
       if (l->body_count > 0)


-- 
-Don
dhoward@redhat.com
gdb engineering




More information about the Gdb-patches mailing list