summaryrefslogtreecommitdiff
path: root/gdb/varobj.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2011-12-22 19:51:09 +0000
committerTom Tromey <tromey@redhat.com>2011-12-22 19:51:09 +0000
commitdbe5eff289dde3ca4b8e603e753004477fd712e7 (patch)
tree04564a73f915fd6fdb7577f374e07d775a3424eb /gdb/varobj.c
parent93f66bbd89f354e4e91b54e0c840656d818b5a45 (diff)
downloadgdb-dbe5eff289dde3ca4b8e603e753004477fd712e7.tar.gz
PR python/12533:
* value.h (release_value_or_incref): Declare. * value.c (struct value) <released>: New field. (free_all_values, release_value, value_release_to_mark): Update 'released'. (release_value_or_incref): New function. * python/py-value.c (valpy_new): Use release_value_or_incref. (value_to_value_object): Likewise. * varobj.c (install_new_value): Move value_incref earlier.
Diffstat (limited to 'gdb/varobj.c')
-rw-r--r--gdb/varobj.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/gdb/varobj.c b/gdb/varobj.c
index 7c68a93bb03..0d5987cb0b7 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -1604,6 +1604,10 @@ install_new_value (struct varobj *var, struct value *value, int initial)
}
}
+ /* Get a reference now, before possibly passing it to any Python
+ code that might release it. */
+ if (value != NULL)
+ value_incref (value);
/* Below, we'll be comparing string rendering of old and new
values. Don't get string rendering if the value is
@@ -1671,8 +1675,6 @@ install_new_value (struct varobj *var, struct value *value, int initial)
if (var->value != NULL && var->value != value)
value_free (var->value);
var->value = value;
- if (value != NULL)
- value_incref (value);
if (value && value_lazy (value) && intentionally_not_fetched)
var->not_fetched = 1;
else