Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: David Allan <dallan@egenera.com>
To: GDB patches <gdb-patches@sources.redhat.com>
Subject: make execute_control_command conform to docs
Date: Tue, 24 Feb 2004 16:47:00 -0000	[thread overview]
Message-ID: <1077640948.1311.61.camel@hasufel.egenera.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 1275 bytes --]

I've filed PR cli/1566 on this issue.  Also, I'm in the process of doing
the copyright assignment, but haven't yet completed it.  From lurking on
the list, it seems like two line patches aren't significant enough to be
a problem.  (I'm hoping.)

The attached patch makes two one-line changes to execute_control_command
in cli/cli-script.c to make it conform to the GDB internals
documentation section 13.1 on safely using cleanups.  Without the patch,
execute_control_command depends on the caller having done the right
thing by putting something on the cleanup_chain.  If
execute_control_command is called when cleanup_chain is null, the
cleanups execute_control_command puts on the chain are not removed, and
undefined behavior results.  

The patch makes execute_control_command safe by initializing old_chain
with a call to make_cleanup with a null_cleanup and always calling
do_cleanups before returning if anything other than the null_cleanup has
been put on the chain.  If the null_cleanup is the only thing put on the
chain, it could get left on it at return, but, as I read the code,
that's harmless.  The other possiblity would be to call do_cleanups at
every point we could return, but that seemed like more changes than were
necessary to fix the problem.  

Dave

[-- Attachment #2: execute_control_command.diff --]
[-- Type: text/plain, Size: 679 bytes --]

Index: cli-script.c
===================================================================
RCS file: /cvs/src/src/gdb/cli/cli-script.c,v
retrieving revision 1.21
diff -u -r1.21 cli-script.c
--- cli-script.c	22 Dec 2003 03:43:19 -0000	1.21
+++ cli-script.c	24 Feb 2004 15:55:06 -0000
@@ -294,7 +294,7 @@
 {
   struct expression *expr;
   struct command_line *current;
-  struct cleanup *old_chain = 0;
+  struct cleanup *old_chain = make_cleanup (null_cleanup, 0);
   struct value *val;
   struct value *val_mark;
   int loop;
@@ -427,8 +427,7 @@
       return invalid_control;
     }
 
-  if (old_chain)
-    do_cleanups (old_chain);
+  do_cleanups (old_chain);
 
   return ret;
 }

             reply	other threads:[~2004-02-24 16:47 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-02-24 16:47 David Allan [this message]
2004-02-24 20:36 ` Andrew Cagney
2004-02-24 21:51   ` Dave Allan
2004-02-24 23:12     ` Andrew Cagney
2004-02-25 14:02       ` Dave Allan
2004-02-25 15:56         ` Andrew Cagney

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=1077640948.1311.61.camel@hasufel.egenera.com \
    --to=dallan@egenera.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