Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Vladimir Prus <ghost@cs.msu.su>
To: gdb-patches@sources.redhat.com
Subject: Re: Fix crash in -var-delete
Date: Wed, 07 Nov 2007 20:07:00 -0000	[thread overview]
Message-ID: <fgt5t6$dn9$1@ger.gmane.org> (raw)
In-Reply-To: <20071107200024.GA9490@caradoc.them.org>

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

Daniel Jacobowitz wrote:

> On Wed, Nov 07, 2007 at 10:57:59PM +0300, Vladimir Prus wrote:
>> The patch and a testcase are attached. OK?
> 
> OK (if you write the changelog)

Thanks. Here's what I've checked in (with changelog).

- Volodya



[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: child_deletion_as_committed.diff --]
[-- Type: text/x-diff; name="child_deletion_as_committed.diff", Size: 3653 bytes --]

Index: ChangeLog
===================================================================
RCS file: /cvs/src/src/gdb/ChangeLog,v
retrieving revision 1.8910
diff -u -p -r1.8910 ChangeLog
--- ChangeLog	7 Nov 2007 06:58:31 -0000	1.8910
+++ ChangeLog	7 Nov 2007 20:05:31 -0000
@@ -1,3 +1,11 @@
+2007-11-07  Vladimir Prus  <vladimir@codesourcery.com>
+
+	Fix crash when a variable object being deleted
+	has any of its children deleted previously.
+	
+	* varobj.c (delete_variable_1): Don't recurse
+	into deleted children.
+	
 2007-11-07  Markus Deuling  <deuling@de.ibm.com>
 
 	* gdbarch.sh (legacy_virtual_frame_pointer): Add gdbarch parameter.
Index: varobj.c
===================================================================
RCS file: /cvs/src/src/gdb/varobj.c,v
retrieving revision 1.96
diff -u -p -r1.96 varobj.c
--- varobj.c	27 Sep 2007 18:04:12 -0000	1.96
+++ varobj.c	7 Nov 2007 20:05:32 -0000
@@ -1292,6 +1292,8 @@ delete_variable_1 (struct cpstack **resu
   for (i = 0; i < VEC_length (varobj_p, var->children); ++i)
     {   
       varobj_p child = VEC_index (varobj_p, var->children, i);
+      if (!child)
+	continue;
       if (!remove_from_parent_p)
 	child->parent = NULL;
       delete_variable_1 (resultp, delcountp, child, 0, only_children_p);
Index: testsuite/ChangeLog
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/ChangeLog,v
retrieving revision 1.1483
diff -u -p -r1.1483 ChangeLog
--- testsuite/ChangeLog	5 Nov 2007 11:32:31 -0000	1.1483
+++ testsuite/ChangeLog	7 Nov 2007 20:05:37 -0000
@@ -1,3 +1,8 @@
+2007-11-07  Vladimir Prus  <vladimir@codesourcery.com>
+
+	* gdb.mi/mi-var-child.c (do_child_deletion): New.
+	* gdb.mi/mi-var-child.exp: Run child_deletion tests.
+	
 2007-11-05  Luis Machado  <luisgpm@br.ibm.com>
 
 	* gdb.base/printcmds.exp: New function
Index: testsuite/gdb.mi/mi-var-child.c
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/mi-var-child.c,v
retrieving revision 1.6
diff -u -p -r1.6 mi-var-child.c
--- testsuite/gdb.mi/mi-var-child.c	23 Aug 2007 18:08:49 -0000	1.6
+++ testsuite/gdb.mi/mi-var-child.c	7 Nov 2007 20:05:37 -0000
@@ -306,6 +306,29 @@ do_special_tests (void)
   incr_a(2);
 }
 
+struct very_simple_struct
+{
+  int a;
+  int b;
+};
+
+int
+do_child_deletion (void)
+{
+  /*: BEGIN: child_deletion :*/
+  struct very_simple_struct s = {1, 2};
+  /*:
+    mi_create_varobj S s "create varobj for s"
+    mi_list_varobj_children S {{S.a a 0 int} {S.b b 0 int}}	\
+       "list children of S"
+    mi_delete_varobj S.a "delete S.a"    
+    mi_delete_varobj S.b "delete S.b"
+    mi_delete_varobj S "delete S"
+    :*/
+  return 99;
+  /*: END: child_deletion :*/  
+}
+
 int
 main (int argc, char *argv [])
 {
@@ -313,6 +336,7 @@ main (int argc, char *argv [])
   do_block_tests ();
   do_children_tests ();
   do_special_tests ();
+  do_child_deletion ();
   exit (0);
 }
 
Index: testsuite/gdb.mi/mi-var-child.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/mi-var-child.exp,v
retrieving revision 1.26
diff -u -p -r1.26 mi-var-child.exp
--- testsuite/gdb.mi/mi-var-child.exp	23 Aug 2007 18:14:19 -0000	1.26
+++ testsuite/gdb.mi/mi-var-child.exp	7 Nov 2007 20:05:37 -0000
@@ -1227,7 +1227,9 @@ mi_gdb_test "-var-update *" \
 	"\\^done,changelist=\\\[\{name=\"psnp->ptrs.0.next.next.long_ptr\",in_scope=\"true\",type_changed=\"false\"\}\\\]" \
 	"update all vars psnp->next->next->long_ptr (and 2.long_ptr) changed"
 
+mi_prepare_inline_tests $srcfile
 
+mi_run_inline_test child_deletion
 
 
 mi_gdb_exit


  reply	other threads:[~2007-11-07 20:07 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-07 19:58 Vladimir Prus
2007-11-07 20:00 ` Daniel Jacobowitz
2007-11-07 20:07   ` Vladimir Prus [this message]
2007-11-07 20:55     ` Joel Brobecker
2007-11-08  8:39       ` Vladimir Prus
2007-11-08 19:19         ` Joel Brobecker
2007-11-08  5:27     ` Nick Roberts
2007-11-08  7:08       ` Vladimir Prus

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='fgt5t6$dn9$1@ger.gmane.org' \
    --to=ghost@cs.msu.su \
    --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