This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH] Destroy allocated values when exiting GDB
- From: Pedro Alves <palves at redhat dot com>
- To: Sergio Durigan Junior <sergiodj at redhat dot com>
- Cc: Tom Tromey <tom at tromey dot com>, Tom Tromey <tromey at adacore dot com>, gdb-patches at sourceware dot org
- Date: Mon, 1 Apr 2019 15:08:46 +0100
- Subject: Re: [PATCH] Destroy allocated values when exiting GDB
- References: <20190320140846.13031-1-tromey@adacore.com> <87r2azkhmq.fsf@redhat.com> <87mulnkcab.fsf@redhat.com> <87a7hjj7aw.fsf@tromey.com> <f4df53c8-67b5-d910-348b-5d50226ccb35@redhat.com> <87ef6uj408.fsf@tromey.com> <87mulia94w.fsf@redhat.com> <87sgv9bwyg.fsf@tromey.com> <87tvfpr55a.fsf@redhat.com> <87y351mhki.fsf@redhat.com> <87sgv81nld.fsf@tromey.com> <5a2d4016-9e4d-dc18-8c3a-2c9ecf214c94@redhat.com> <87lg0xwe3t.fsf_-_@redhat.com>
On 03/29/2019 09:43 PM, Sergio Durigan Junior wrote:
>
> diff --git a/gdb/top.c b/gdb/top.c
> index b10b0649e9..ffbe8e517f 100644
> --- a/gdb/top.c
> +++ b/gdb/top.c
> @@ -1672,6 +1672,9 @@ quit_force (int *exit_arg, int from_tty)
> }
> END_CATCH
>
> + /* Destroy any values currently allocated. */
> + finalize_values ();
I think that someone reading this without context may not realize
why we need to do that. How about extending the comment, like:
/* 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. */
> diff --git a/gdb/value.h b/gdb/value.h
> index d3905cc354..7853950ca3 100644
> --- a/gdb/value.h
> +++ b/gdb/value.h
> @@ -1189,4 +1189,8 @@ extern struct value *call_xmethod (struct value *method,
> extern int value_union_variant (struct type *union_type,
> const gdb_byte *contents);
>
> +/* Destroy the values currently allocated. This is mostly called when
> + GDB is exiting (e.g., on quit_force). */
s/mostly//
> +extern void finalize_values ();
> +
> #endif /* !defined (VALUE_H) */
LGTM with those changes.
Thanks,
Pedro Alves