This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: MI problem
- From: Andrew STUBBS <andrew dot stubbs at st dot com>
- To: Daniel Jacobowitz <drow at false dot org>
- Cc: gdb-patches at sources dot redhat dot com
- Date: Fri, 18 Nov 2005 16:17:26 +0000
- Subject: Re: MI problem
- References: <4378DDB4.3020702@st.com> <20051117042008.GE3513@nevyn.them.org> <437CD72D.70104@st.com> <20051118155426.GB9846@nevyn.them.org>
How about we commit this without the current_interp_named_p change for
now? Normally we'd need to use a cleanup to save and restore uiout,
but nothing here can throw exceptions AFAICT, so we're OK with the way
you've done it.
OK, I'm happy to do that.
Am I OK to commit the attached to both branches?
Andrew
2005-11-18 Andrew Stubbs <andrew.stubbs@st.com>
* mi/mi-main.c (mi_load_progress): Ensure the use of the correct mi
uiout for the duration of the function.
Index: src/gdb/mi/mi-main.c
===================================================================
--- src.orig/gdb/mi/mi-main.c 2005-11-17 19:47:42.000000000 +0000
+++ src/gdb/mi/mi-main.c 2005-11-18 16:16:38.000000000 +0000
@@ -1365,9 +1365,18 @@ mi_load_progress (const char *section_na
static struct timeval last_update;
static char *previous_sect_name = NULL;
int new_section;
+ struct ui_out *saved_uiout;
- if (!current_interp_named_p (INTERP_MI)
- && !current_interp_named_p (INTERP_MI1))
+ /* This function is called through deprecated_show_load_progress
+ which means uiout may not be correct. Fix it for the duration
+ of this function. */
+ saved_uiout = uiout;
+
+ if (current_interp_named_p (INTERP_MI))
+ uiout = mi_out_new (2);
+ else if (current_interp_named_p (INTERP_MI1))
+ uiout = mi_out_new (1);
+ else
return;
update_threshold.tv_sec = 0;
@@ -1424,6 +1433,9 @@ mi_load_progress (const char *section_na
fputs_unfiltered ("\n", raw_stdout);
gdb_flush (raw_stdout);
}
+
+ xfree (uiout);
+ uiout = saved_uiout;
}
void