When the user exits GDB, we might still have some allocated values in
the chain, which, in specific scenarios, can cause problems when GDB
attempts to destroy them in "quit_force". For example, see the bug
reported at:
https://bugzilla.redhat.com/show_bug.cgi?id=
1690120
And the thread starting at:
https://sourceware.org/ml/gdb-patches/2019-03/msg00475.html
Message-ID: <87r2azkhmq.fsf@redhat.com>
In order to avoid that, and to be more aware of our allocated
resources, this commit implements a new function "finalize_values" and
calls it from inside "quit_force".
Tested by the BuildBot.
2019-04-01 Sergio Durigan Junior <sergiodj@redhat.com>
Pedro Alves <palves@redhat.com>
* top.c (quit_force): Call 'finalize_values'.
* value.c (finalize_values): New function.
* value.h (finalize_values): Declare.
+2019-04-01 Sergio Durigan Junior <sergiodj@redhat.com>
+ Pedro Alves <palves@redhat.com>
+
+ * top.c (quit_force): Call 'finalize_values'.
+ * value.c (finalize_values): New function.
+ * value.h (finalize_values): Declare.
+
2019-03-30 Eli Zaretskii <eliz@gnu.org>
* NEWS: Announce $_gdb_major and $_gdb_minor.
}
END_CATCH
+ /* Destroy any values currently allocated now instead of leaving it
+ to global destructors, because that may be too late. For
+ example, the destructors of xmethod values call into the Python
+ runtime, which is finalized via a final cleanup. */
+ finalize_values ();
+
/* Do any final cleanups before exiting. */
TRY
{
selftests::test_insert_into_bit_range_vector);
#endif
}
+
+/* See value.h. */
+
+void
+finalize_values ()
+{
+ all_values.clear ();
+}
extern int value_union_variant (struct type *union_type,
const gdb_byte *contents);
+/* Destroy the values currently allocated. This is called when GDB is
+ exiting (e.g., on quit_force). */
+extern void finalize_values ();
+
#endif /* !defined (VALUE_H) */