From ec471b627aa76fa8ac1f103ecabd73e304e952c8 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 23 Feb 2024 13:24:03 -0700 Subject: [PATCH] Change finalize_values into a final cleanup This removes finalize_values in favor of adding a new final cleanup. This is safe now that extension languages are explicitly shut down. --- gdb/top.c | 6 ------ gdb/value.c | 15 ++++++++------- gdb/value.h | 4 ---- 3 files changed, 8 insertions(+), 17 deletions(-) diff --git a/gdb/top.c b/gdb/top.c index 67d6670cd9c..cf7d3a913ba 100644 --- a/gdb/top.c +++ b/gdb/top.c @@ -1803,12 +1803,6 @@ quit_force (int *exit_arg, int from_tty) exception_print (gdb_stderr, ex); } - /* 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 { diff --git a/gdb/value.c b/gdb/value.c index c7e940badb9..a2b2721d183 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -4499,12 +4499,13 @@ and exceeds this limit will cause an error."), selftests::test_insert_into_bit_range_vector); selftests::register_test ("value_copy", selftests::test_value_copy); #endif -} - -/* See value.h. */ -void -finalize_values () -{ - all_values.clear (); + /* Destroy any values currently allocated in a final cleanup 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. */ + add_final_cleanup ([] () + { + all_values.clear (); + }); } diff --git a/gdb/value.h b/gdb/value.h index e8d3c9fd907..9d7e88d9433 100644 --- a/gdb/value.h +++ b/gdb/value.h @@ -1630,10 +1630,6 @@ struct value *call_internal_function (struct gdbarch *gdbarch, const char *value_internal_function_name (struct value *); -/* Destroy the values currently allocated. This is called when GDB is - exiting (e.g., on quit_force). */ -extern void finalize_values (); - /* Convert VALUE to a gdb_mpq. The caller must ensure that VALUE is of floating-point, fixed-point, or integer type. */ extern gdb_mpq value_to_gdb_mpq (struct value *value); -- 2.39.5