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; }
This commit is contained in:
parent
c4dfafabc5
commit
bd77e8ff27
@ -1,3 +1,8 @@
|
|||||||
|
2017-09-16 Simon Marchi <simon.marchi@ericsson.com>
|
||||||
|
|
||||||
|
* mi/mi-main.c (mi_load_progress): Make uiout variable
|
||||||
|
a unique_ptr.
|
||||||
|
|
||||||
2017-09-15 Pedro Alves <palves@redhat.com>
|
2017-09-15 Pedro Alves <palves@redhat.com>
|
||||||
|
|
||||||
* compile/compile-c-types.c (convert_enum, convert_int)
|
* compile/compile-c-types.c (convert_enum, convert_int)
|
||||||
|
@ -2325,7 +2325,6 @@ mi_load_progress (const char *section_name,
|
|||||||
static char *previous_sect_name = NULL;
|
static char *previous_sect_name = NULL;
|
||||||
int new_section;
|
int new_section;
|
||||||
struct ui_out *saved_uiout;
|
struct ui_out *saved_uiout;
|
||||||
struct ui_out *uiout;
|
|
||||||
struct mi_interp *mi = (struct mi_interp *) current_interpreter ();
|
struct mi_interp *mi = (struct mi_interp *) current_interpreter ();
|
||||||
|
|
||||||
/* This function is called through deprecated_show_load_progress
|
/* This function is called through deprecated_show_load_progress
|
||||||
@ -2333,17 +2332,19 @@ mi_load_progress (const char *section_name,
|
|||||||
of this function. */
|
of this function. */
|
||||||
saved_uiout = current_uiout;
|
saved_uiout = current_uiout;
|
||||||
|
|
||||||
|
std::unique_ptr<ui_out> uiout;
|
||||||
|
|
||||||
if (current_interp_named_p (INTERP_MI)
|
if (current_interp_named_p (INTERP_MI)
|
||||||
|| current_interp_named_p (INTERP_MI2))
|
|| 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))
|
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))
|
else if (current_interp_named_p (INTERP_MI3))
|
||||||
current_uiout = mi_out_new (3);
|
uiout.reset (mi_out_new (3));
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
|
|
||||||
uiout = current_uiout;
|
current_uiout = uiout.get ();
|
||||||
|
|
||||||
new_section = (previous_sect_name ?
|
new_section = (previous_sect_name ?
|
||||||
strcmp (previous_sect_name, section_name) : 1);
|
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 (current_token, mi->raw_stdout);
|
||||||
fputs_unfiltered ("+download", 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_string ("section", section_name);
|
||||||
uiout->field_int ("section-size", total_section);
|
uiout->field_int ("section-size", total_section);
|
||||||
uiout->field_int ("total-size", grand_total);
|
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);
|
fputs_unfiltered ("\n", mi->raw_stdout);
|
||||||
gdb_flush (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 (current_token, mi->raw_stdout);
|
||||||
fputs_unfiltered ("+download", 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_string ("section", section_name);
|
||||||
uiout->field_int ("section-sent", sent_so_far);
|
uiout->field_int ("section-sent", sent_so_far);
|
||||||
uiout->field_int ("section-size", total_section);
|
uiout->field_int ("section-size", total_section);
|
||||||
uiout->field_int ("total-sent", total_sent);
|
uiout->field_int ("total-sent", total_sent);
|
||||||
uiout->field_int ("total-size", grand_total);
|
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);
|
fputs_unfiltered ("\n", mi->raw_stdout);
|
||||||
gdb_flush (mi->raw_stdout);
|
gdb_flush (mi->raw_stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
xfree (uiout);
|
|
||||||
current_uiout = saved_uiout;
|
current_uiout = saved_uiout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user