Index: ChangeLog =================================================================== RCS file: /cvs/src/src/gdb/ChangeLog,v retrieving revision 1.7995 diff -u -p -r1.7995 ChangeLog --- ChangeLog 28 Nov 2006 22:21:23 -0000 1.7995 +++ ChangeLog 29 Nov 2006 06:40:51 -0000 @@ -1,3 +1,9 @@ +2006-11-29 Vladimir Prus + + * varobj.c (varobj_set_value): Don't compare the old + and the new value here. Don't assign new value here. + Instead, call install_new_value. + 2006-11-28 Daniel Jacobowitz * regformats/reg-mips64.dat: New file. Index: varobj.c =================================================================== RCS file: /cvs/src/src/gdb/varobj.c,v retrieving revision 1.61 diff -u -p -r1.61 varobj.c --- varobj.c 28 Nov 2006 17:23:09 -0000 1.61 +++ varobj.c 29 Nov 2006 06:40:52 -0000 @@ -841,18 +841,22 @@ varobj_set_value (struct varobj *var, ch array's content. */ value = coerce_array (value); - if (!value_contents_equal (var->value, value)) - var->updated = 1; - /* The new value may be lazy. gdb_value_assign, or rather value_contents, will take care of this. If fetching of the new value will fail, gdb_value_assign with catch the exception. */ if (!gdb_value_assign (var->value, value, &val)) return 0; - value_free (var->value); + release_value (val); - var->value = val; + + /* If the value has changed, record it, so that next -var-update can + report this change. If a variable had a value of '1', we've set it + to '333' and then set again to '1', when -var-update will report this + variable as changed -- because the first assignment has set the + 'updated' flag. There's no need to optimize that, because return value + of -var-update should be considered an approximation. */ + var->updated = install_new_value (var, val, 0 /* Compare values. */); input_radix = saved_input_radix; return 1; }