binutils-gdb/gdb/mi
Simon Marchi bd77e8ff27 mi_load_progress: Use unique_ptr to manage ui_out lifetime
In mi_load_progress, we xfree a ui_out object.  Because ui_out is not
trivially destructible, it should be freed with delete.  This patch
makes use of a unique_ptr to do it.

gdb/ChangeLog:

	* mi/mi-main.c (mi_load_progress): Make uiout variable
	a unique_ptr.

diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c index 0ee2605..0359dc1
100644 --- a/gdb/mi/mi-main.c +++ b/gdb/mi/mi-main.c @@ -2325,7 +2325,6
@@ mi_load_progress (const char *section_name, static char
*previous_sect_name = NULL; int new_section; struct ui_out *saved_uiout;
-  struct ui_out *uiout; struct mi_interp *mi = (struct mi_interp *)
   current_interpreter ();

   /* This function is called through deprecated_show_load_progress
@@ -2333,17 +2332,19 @@ mi_load_progress (const char *section_name,
      of this function.  */
   saved_uiout = current_uiout;

+  std::unique_ptr<ui_out> uiout;
+
   if (current_interp_named_p (INTERP_MI)
       || current_interp_named_p (INTERP_MI2))
-    current_uiout = mi_out_new (2);
+    uiout.reset (mi_out_new (2));
   else if (current_interp_named_p (INTERP_MI1))
-    current_uiout = mi_out_new (1);
+    uiout.reset (mi_out_new (1));
   else if (current_interp_named_p (INTERP_MI3))
-    current_uiout = mi_out_new (3);
+    uiout.reset (mi_out_new (3));
   else
     return;

-  uiout = current_uiout;
+  current_uiout = uiout.get ();

   new_section = (previous_sect_name ?
 		 strcmp (previous_sect_name, section_name) : 1);
@@ -2356,12 +2357,12 @@ mi_load_progress (const char *section_name,
 	fputs_unfiltered (current_token, mi->raw_stdout);
       fputs_unfiltered ("+download", mi->raw_stdout);
       {
-	ui_out_emit_tuple tuple_emitter (uiout, NULL);
+	ui_out_emit_tuple tuple_emitter (uiout.get (), NULL);
 	uiout->field_string ("section", section_name);
 	uiout->field_int ("section-size", total_section);
 	uiout->field_int ("total-size", grand_total);
       }
-      mi_out_put (uiout, mi->raw_stdout);
+      mi_out_put (uiout.get (), mi->raw_stdout);
       fputs_unfiltered ("\n", mi->raw_stdout);
       gdb_flush (mi->raw_stdout);
     }
@@ -2374,19 +2375,18 @@ mi_load_progress (const char *section_name,
 	fputs_unfiltered (current_token, mi->raw_stdout);
       fputs_unfiltered ("+download", mi->raw_stdout);
       {
-	ui_out_emit_tuple tuple_emitter (uiout, NULL);
+	ui_out_emit_tuple tuple_emitter (uiout.get (), NULL);
 	uiout->field_string ("section", section_name);
 	uiout->field_int ("section-sent", sent_so_far);
 	uiout->field_int ("section-size", total_section);
 	uiout->field_int ("total-sent", total_sent);
 	uiout->field_int ("total-size", grand_total);
       }
-      mi_out_put (uiout, mi->raw_stdout);
+      mi_out_put (uiout.get (), mi->raw_stdout);
       fputs_unfiltered ("\n", mi->raw_stdout);
       gdb_flush (mi->raw_stdout);
     }

-  xfree (uiout);
   current_uiout = saved_uiout;
 }
2017-09-16 13:45:55 +02:00
..
ChangeLog-1999-2003
mi-cmd-break.c Change setup_breakpoint_reporting to return a scoped_restore 2017-09-11 16:15:07 -06:00
mi-cmd-break.h Change setup_breakpoint_reporting to return a scoped_restore 2017-09-11 16:15:07 -06:00
mi-cmd-catch.c Change setup_breakpoint_reporting to return a scoped_restore 2017-09-11 16:15:07 -06:00
mi-cmd-disas.c Introduce gdb_disassembly_flags 2017-09-04 18:23:22 +01:00
mi-cmd-env.c Remove unnecessary function prototypes. 2017-09-09 11:02:37 -07:00
mi-cmd-file.c Use ui_out_emit_tuple in more places 2017-09-09 13:46:05 -06:00
mi-cmd-info.c Introduce and use ui_out_emit_table 2017-08-03 07:58:51 -06:00
mi-cmd-stack.c Use ui_out_emit_list 2017-04-22 09:47:01 -06:00
mi-cmd-target.c -Wwrite-strings: Constify mi_cmd_argv_ftype's 'command' parameter 2017-04-05 19:21:34 +01:00
mi-cmd-var.c Use ui_out_emit_list and ui_out_emit_tuple with gdb::optional 2017-09-09 13:46:09 -06:00
mi-cmds.c Remove unnecessary function prototypes. 2017-09-09 11:02:37 -07:00
mi-cmds.h -Wwrite-strings: Constify mi_cmd_argv_ftype's 'command' parameter 2017-04-05 19:21:34 +01:00
mi-common.c update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
mi-common.h C++-fy struct interp/cli_interp/tui_interp/mi_interp 2017-02-03 16:30:04 +00:00
mi-console.c Eliminate make_cleanup_ui_file_delete / make ui_file a class hierarchy 2017-02-02 11:11:47 +00:00
mi-console.h Eliminate make_cleanup_ui_file_delete / make ui_file a class hierarchy 2017-02-02 11:11:47 +00:00
mi-getopt.c update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
mi-getopt.h update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
mi-interp.c Remove make_cleanup_ui_out_redirect_pop 2017-09-09 13:46:08 -06:00
mi-interp.h Add -file-list-shared-libraries MI command 2017-03-20 14:57:51 -04:00
mi-main.c mi_load_progress: Use unique_ptr to manage ui_out lifetime 2017-09-16 13:45:55 +02:00
mi-main.h update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
mi-out.c Eliminate make_cleanup_ui_file_delete / make ui_file a class hierarchy 2017-02-02 11:11:47 +00:00
mi-out.h Eliminate make_cleanup_ui_file_delete / make ui_file a class hierarchy 2017-02-02 11:11:47 +00:00
mi-parse.c Make extract_arg return a std::string 2017-09-11 15:46:14 -06:00
mi-parse.h C++ify mi_parse 2017-04-12 11:16:18 -06:00
mi-symbol-cmds.c Use ui_out_emit_list 2017-04-22 09:47:01 -06:00