48 lines
1.4 KiB
Diff
48 lines
1.4 KiB
Diff
diff --git a/gdb/tui/tui.c b/gdb/tui/tui.c
|
|
index 828e42bccf7..551a72e3992 100644
|
|
--- a/gdb/tui/tui.c
|
|
+++ b/gdb/tui/tui.c
|
|
@@ -57,7 +57,7 @@
|
|
|
|
/* Tells whether the TUI is active or not. */
|
|
bool tui_active = false;
|
|
-static bool tui_finish_init = true;
|
|
+static int tui_init = -1;
|
|
|
|
enum tui_key_mode tui_current_key_mode = TUI_COMMAND_MODE;
|
|
|
|
@@ -363,7 +363,13 @@ tui_enable (void)
|
|
/* To avoid to initialize curses when gdb starts, there is a deferred
|
|
curses initialization. This initialization is made only once
|
|
and the first time the curses mode is entered. */
|
|
- if (tui_finish_init)
|
|
+ if (tui_init == 0)
|
|
+ {
|
|
+ /* Initalization failed before, just throw a generic error, don't try
|
|
+ again. Workaround for segfault in libncurses5 bsc#1179210. */
|
|
+ error (_("Cannot enable the TUI"));
|
|
+ }
|
|
+ else if (tui_init == -1)
|
|
{
|
|
WINDOW *w;
|
|
SCREEN *s;
|
|
@@ -383,6 +389,8 @@ tui_enable (void)
|
|
if (!gdb_stderr->isatty ())
|
|
error (_("Cannot enable the TUI when output is not a terminal"));
|
|
|
|
+ tui_init = 0;
|
|
+
|
|
s = newterm (NULL, stdout, stdin);
|
|
#ifdef __MINGW32__
|
|
/* The MinGW port of ncurses requires $TERM to be unset in order
|
|
@@ -435,7 +443,8 @@ tui_enable (void)
|
|
tui_set_win_focus_to (TUI_SRC_WIN);
|
|
keypad (TUI_CMD_WIN->handle.get (), TRUE);
|
|
wrefresh (TUI_CMD_WIN->handle.get ());
|
|
- tui_finish_init = false;
|
|
+
|
|
+ tui_init = 1;
|
|
}
|
|
else
|
|
{
|