From: Don Howard <dhoward@redhat.com>
To: <gdb@sources.redhat.com>
Subject: Re: [RFA] deleting breakpoints inside of 'commands'
Date: Fri, 14 Sep 2001 18:09:00 -0000 [thread overview]
Message-ID: <Pine.LNX.4.33.0109141738440.1364-100000@theotherone> (raw)
In-Reply-To: <Pine.LNX.4.33.0109131315390.1364-100000@theotherone>
Here is an other variation on how to deal with 'commands' scripts that
delete their own breakpoint. The patch below makes a copy of the
commands list before executing it and deletes the copy when finished.
Comments?
2001-09-14 Don Howard <dhoward@redhat.com>
* breakpoint.c (bpstat_do_actions): Avoid deleting a 'commands'
list while executing that list. Thanks to Pierre Muller
<muller@ics.u-strasbg.fr> for suggesting this implementation.
* cli/cli-script.c (dup_command_lines): New function.
* defs.h: Added declaration of new function.
Index: breakpoint.c
===================================================================
RCS file: /cvs/src/src/gdb/breakpoint.c,v
retrieving revision 1.52
diff -p -u -w -r1.52 breakpoint.c
--- breakpoint.c 2001/08/02 11:58:28 1.52
+++ breakpoint.c 2001/09/15 00:39:33
@@ -1824,7 +1824,8 @@ top:
breakpoint_proceeded = 0;
for (; bs != NULL; bs = bs->next)
{
- cmd = bs->commands;
+ cmd = dup_command_lines (bs->commands);
+
while (cmd != NULL)
{
execute_control_command (cmd);
@@ -1834,6 +1835,9 @@ top:
else
cmd = cmd->next;
}
+
+ free_command_lines (&cmd);
+
if (breakpoint_proceeded)
/* The inferior is proceeded by the command; bomb out now.
The bpstat chain has been blown away by wait_for_inferior.
Index: defs.h
===================================================================
RCS file: /cvs/src/src/gdb/defs.h,v
retrieving revision 1.63
diff -p -u -w -r1.63 defs.h
--- defs.h 2001/09/07 21:33:08 1.63
+++ defs.h 2001/09/15 00:39:34
@@ -837,6 +837,7 @@ struct command_line
extern struct command_line *read_command_lines (char *, int);
extern void free_command_lines (struct command_line **);
+extern struct command_line * dup_command_lines (struct command_line *);
/* To continue the execution commands when running gdb asynchronously.
A continuation structure contains a pointer to a function to be called
Index: 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/15 00:39:35
@@ -1005,6 +1005,59 @@ read_command_lines (char *prompt_arg, in
return (head);
}
+/* Duplicate a chain of struct command_line's */
+
+struct command_line *
+dup_command_lines (struct command_line *l)
+{
+ struct command_line *dup = NULL;
+ register struct command_line *next = NULL;
+
+
+ for (; l ; l = l->next)
+ {
+ if (next == NULL)
+ {
+ dup = next = (struct command_line *)
+ xmalloc (sizeof (struct command_line));
+ }
+ else
+ {
+ next->next = (struct command_line *)
+ xmalloc (sizeof (struct command_line));
+
+ next = next->next;
+ }
+
+
+ if (next == NULL)
+ return NULL;
+
+
+ next->next = NULL;
+ next->line = savestring (l->line, strlen (l->line));
+ next->control_type = l->control_type;
+ next->body_count = l->body_count;
+
+
+ if (l->body_count > 0)
+ {
+ int i;
+ struct command_line **blist = l->body_list;
+
+ next->body_list =
+ (struct command_line **) xmalloc (sizeof (struct command_line *)
+ * l->body_count);
+
+ for (i = 0; i < l->body_count; i++, blist++)
+ next->body_list[i] = dup_command_lines (*blist);
+ }
+ }
+
+ return dup;
+}
+
+
/* Free a chain of struct command_line's. */
void
--
-Don
dhoward@redhat.com
gdb engineering
prev parent reply other threads:[~2001-09-14 18:09 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-09-11 15:38 Don Howard
2001-09-12 1:47 ` Pierre Muller
2001-09-13 1:01 ` Pierre Muller
2001-09-13 13:50 ` Don Howard
2001-09-13 14:14 ` Andrew Cagney
2001-09-14 18:09 ` Don Howard [this message]
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=Pine.LNX.4.33.0109141738440.1364-100000@theotherone \
--to=dhoward@redhat.com \
--cc=gdb@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