From 277474eea03e0f77a9d37c69dfab3f0c41812348 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Thu, 25 Jun 2020 14:44:13 -0400 Subject: [PATCH] gdb: make inferior::terminal a unique ptr This changes the inferior::terminal field to be a unique pointer, so its deallocation is automatically managed. gdb/ChangeLog: * inferior.h (struct inferior) : Change type to gdb::unique_xmalloc_ptr. * inferior.c (inferior::~inferior): Don't free inf->terminal. * infcmd.c (set_inferior_io_terminal): Don't free terminal field, adjust to unique pointer. (get_inferior_io_terminal): Adjust to unique pointer. Change-Id: Iedb6459b4f9eeae812b0cb9d514b5707d5107cdb --- gdb/ChangeLog | 9 +++++++++ gdb/infcmd.c | 6 ++---- gdb/inferior.c | 1 - gdb/inferior.h | 3 ++- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0a36c6bc48c..d9b6a49bd10 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2020-06-25 Simon Marchi + + * inferior.h (struct inferior) : Change type to + gdb::unique_xmalloc_ptr. + * inferior.c (inferior::~inferior): Don't free inf->terminal. + * infcmd.c (set_inferior_io_terminal): Don't free terminal + field, adjust to unique pointer. + (get_inferior_io_terminal): Adjust to unique pointer. + 2020-06-25 Andrew Burgess * riscv-tdep.c (riscv_print_registers_info): Loop over all diff --git a/gdb/infcmd.c b/gdb/infcmd.c index 42b050d3c4e..48d6a91c0c2 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -108,10 +108,8 @@ int stopped_by_random_signal; void set_inferior_io_terminal (const char *terminal_name) { - xfree (current_inferior ()->terminal); - if (terminal_name != NULL && *terminal_name != '\0') - current_inferior ()->terminal = xstrdup (terminal_name); + current_inferior ()->terminal.reset (xstrdup (terminal_name)); else current_inferior ()->terminal = NULL; } @@ -119,7 +117,7 @@ set_inferior_io_terminal (const char *terminal_name) const char * get_inferior_io_terminal (void) { - return current_inferior ()->terminal; + return current_inferior ()->terminal.get (); } static void diff --git a/gdb/inferior.c b/gdb/inferior.c index 2f4ced0788d..d3bece029dd 100644 --- a/gdb/inferior.c +++ b/gdb/inferior.c @@ -79,7 +79,6 @@ inferior::~inferior () discard_all_inferior_continuations (inf); inferior_free_data (inf); xfree (inf->args); - xfree (inf->terminal); target_desc_info_free (inf->tdesc_info); } diff --git a/gdb/inferior.h b/gdb/inferior.h index 95af474eede..5002b0b8b3d 100644 --- a/gdb/inferior.h +++ b/gdb/inferior.h @@ -52,6 +52,7 @@ struct thread_info; #include "symfile-add-flags.h" #include "gdbsupport/refcounted-object.h" #include "gdbsupport/forward-scope-exit.h" +#include "gdbsupport/gdb_unique_ptr.h" #include "gdbsupport/common-inferior.h" #include "gdbthread.h" @@ -456,7 +457,7 @@ public: gdb::unique_xmalloc_ptr cwd; /* The name of terminal device to use for I/O. */ - char *terminal = NULL; + gdb::unique_xmalloc_ptr terminal; /* The terminal state as set by the last target_terminal::terminal_* call. */ -- 2.30.2