This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[RFA] uiout fix for Insight


There is a problem with my recent ui_file patch for Insight.  It creates a
new gdb_stdout and deletes the old one.  Unfortunately, gdb_init()
initialized a global "uiout" pointing to the old gdb_stdout. This can
cause core dumps.

I'm not sure what the best fix is; I got dizzy tracing through all the ui,
cli, and mi stuff,  but the following seems to work.  OK to check in?

2001-04-10  Martin M. Hunt  <hunt@redhat.com>

	* top.c (gdb_init): Don't call cli_out_new() to
	create global uiout if init_ui_hook is set.  uiout will
	have to be initialized there.

2001-04-10  Martin M. Hunt  <hunt@redhat.com>

	* generic/gdbtk.c (gdbtk_init): Initialize uiout.


Index: top.c
===================================================================
RCS file: /cvs/src/src/gdb/top.c,v
retrieving revision 1.31
diff -u -p -r1.31 top.c
--- top.c	2001/04/05 15:19:42	1.31
+++ top.c	2001/04/10 21:50:36
@@ -704,17 +704,18 @@ gdb_init (char *argv0)

 #ifdef UI_OUT
   /* Install the default UI */
-  uiout = cli_out_new (gdb_stdout);
-#endif
-
-#ifdef UI_OUT
-  /* All the interpreters should have had a look at things by now.
-     Initialize the selected interpreter. */
-  if (interpreter_p && !init_ui_hook)
+  if (!init_ui_hook)
     {
-      fprintf_unfiltered (gdb_stderr, "Interpreter `%s' unrecognized.\n",
-			  interpreter_p);
-      exit (1);
+      uiout = cli_out_new (gdb_stdout);
+
+      /* All the interpreters should have had a look at things by now.
+	 Initialize the selected interpreter. */
+      if (interpreter_p)
+	{
+	  fprintf_unfiltered (gdb_stderr, "Interpreter `%s' unrecognized.\n",
+			      interpreter_p);
+	  exit (1);
+	}
     }
 #endif

@@ -733,8 +734,8 @@ execute_command (char *p, int from_tty)
   static int warned = 0;
   char *line;
   /* FIXME: These should really be in an appropriate header file */
-extern void serial_log_command (const char *);
-
+  extern void serial_log_command (const char *);
+
   free_all_values ();

   /* Force cleanup of any alloca areas if using C alloca instead of
Index: gdbtk/generic/gdbtk.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk.c,v
retrieving revision 1.10
diff -u -p -r1.10 gdbtk.c
--- gdbtk.c	2001/04/05 02:02:14	1.10
+++ gdbtk.c	2001/04/10 21:50:36
@@ -386,7 +386,8 @@ gdbtk_init (argv0)
   gdb_stderr = gdbtk_fileopen ();
   gdb_stdlog = gdbtk_fileopen ();
   gdb_stdtarg = gdbtk_fileopen ();
-
+  uiout = cli_out_new (gdb_stdout);
+
   /* First init tcl and tk. */
   Tcl_FindExecutable (argv0);
   gdbtk_interp = Tcl_CreateInterp ();


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]