diff options
author | Tom Tromey <tromey@adacore.com> | 2022-11-17 09:09:59 -0700 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2022-11-28 13:22:40 -0700 |
commit | 2b141965f2ddef8cf3e79d357768a98c8703a5df (patch) | |
tree | 717f4e830e5feda928ea4202711e3079a3ec4515 /gdb/mi | |
parent | 19622df10dd5a8d3567e79d0661770029e4fbcfe (diff) | |
download | gdb-2b141965f2ddef8cf3e79d357768a98c8703a5df.zip gdb-2b141965f2ddef8cf3e79d357768a98c8703a5df.tar.gz gdb-2b141965f2ddef8cf3e79d357768a98c8703a5df.tar.bz2 |
Don't let tee_file own a stream
Right now, tee_file owns the second stream it writes to. This is done
for the convenience of the users. In a subsequent patch, this will no
longer be convenient, so this patch moves the responsibility for
ownership to the users of tee_file.
Diffstat (limited to 'gdb/mi')
-rw-r--r-- | gdb/mi/mi-interp.c | 15 | ||||
-rw-r--r-- | gdb/mi/mi-interp.h | 2 |
2 files changed, 7 insertions, 10 deletions
diff --git a/gdb/mi/mi-interp.c b/gdb/mi/mi-interp.c index af24220..482166e 100644 --- a/gdb/mi/mi-interp.c +++ b/gdb/mi/mi-interp.c @@ -1275,21 +1275,16 @@ mi_interp::set_logging (ui_file_up logfile, bool logging_redirect, { mi->saved_raw_stdout = mi->raw_stdout; - /* If something is being redirected, then grab logfile. */ - ui_file *logfile_p = nullptr; - if (logging_redirect || debug_redirect) - { - logfile_p = logfile.get (); - mi->saved_raw_file_to_delete = logfile_p; - } + ui_file *logfile_p = logfile.get (); + mi->saved_raw_file_to_delete = logfile.release (); /* If something is not being redirected, then a tee containing both the logfile and stdout. */ ui_file *tee = nullptr; if (!logging_redirect || !debug_redirect) { - tee = new tee_file (mi->raw_stdout, std::move (logfile)); - mi->saved_raw_file_to_delete = tee; + tee = new tee_file (mi->raw_stdout, logfile_p); + mi->saved_tee_to_delete = tee; } mi->raw_stdout = logging_redirect ? logfile_p : tee; @@ -1297,9 +1292,11 @@ mi_interp::set_logging (ui_file_up logfile, bool logging_redirect, else { delete mi->saved_raw_file_to_delete; + delete mi->saved_tee_to_delete; mi->raw_stdout = mi->saved_raw_stdout; mi->saved_raw_stdout = nullptr; mi->saved_raw_file_to_delete = nullptr; + mi->saved_tee_to_delete = nullptr; } mi->out->set_raw (mi->raw_stdout); diff --git a/gdb/mi/mi-interp.h b/gdb/mi/mi-interp.h index d89439f..d118ffb 100644 --- a/gdb/mi/mi-interp.h +++ b/gdb/mi/mi-interp.h @@ -57,7 +57,7 @@ public: done. */ struct ui_file *saved_raw_stdout; struct ui_file *saved_raw_file_to_delete; - + struct ui_file *saved_tee_to_delete; /* MI's builder. */ struct ui_out *mi_uiout; |