From a1d2db08d8421793130c59dcd54631a7425686fb Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Mon, 26 May 2014 10:36:35 +0200 Subject: [PATCH 1/2] console: kill MAX_CONSOLES, alloc consoles dynamically Signed-off-by: Gerd Hoffmann --- ui/console.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/ui/console.c b/ui/console.c index 2ce55a69d090..b5dac64125ca 100644 --- a/ui/console.c +++ b/ui/console.c @@ -30,7 +30,6 @@ #include "trace.h" #define DEFAULT_BACKSCROLL 512 -#define MAX_CONSOLES 12 #define CONSOLE_CURSOR_PERIOD 500 typedef struct TextAttributes { @@ -173,7 +172,7 @@ struct DisplayState { static DisplayState *display_state; static QemuConsole *active_console; -static QemuConsole *consoles[MAX_CONSOLES]; +static QemuConsole **consoles; static int nb_consoles = 0; static bool cursor_visible_phase; static QEMUTimer *cursor_timer; @@ -983,9 +982,6 @@ void console_select(unsigned int index) DisplayChangeListener *dcl; QemuConsole *s; - if (index >= MAX_CONSOLES) - return; - trace_console_select(index); s = qemu_console_lookup_by_index(index); if (s) { @@ -1191,9 +1187,6 @@ static QemuConsole *new_console(DisplayState *ds, console_type_t console_type, QemuConsole *s; int i; - if (nb_consoles >= MAX_CONSOLES) - return NULL; - obj = object_new(TYPE_QEMU_CONSOLE); s = QEMU_CONSOLE(obj); s->head = head; @@ -1211,6 +1204,8 @@ static QemuConsole *new_console(DisplayState *ds, console_type_t console_type, } s->ds = ds; s->console_type = console_type; + + consoles = g_realloc(consoles, sizeof(*consoles) * (nb_consoles+1)); if (console_type != GRAPHIC_CONSOLE) { s->index = nb_consoles; consoles[nb_consoles++] = s; @@ -1634,7 +1629,7 @@ QemuConsole *graphic_console_init(DeviceState *dev, uint32_t head, QemuConsole *qemu_console_lookup_by_index(unsigned int index) { - if (index >= MAX_CONSOLES) { + if (index >= nb_consoles) { return NULL; } return consoles[index]; From 333cb18ff4aaf249b2e81a376bee2b15370f4784 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Mon, 2 Jun 2014 14:07:18 +0200 Subject: [PATCH 2/2] console: fix -vga none -sdl crash Call get_alloc_displaystate() for proper initialization instead of allocating with g_new(). Signed-off-by: Gerd Hoffmann --- ui/console.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ui/console.c b/ui/console.c index b5dac64125ca..7dc4c1414ce5 100644 --- a/ui/console.c +++ b/ui/console.c @@ -1580,10 +1580,7 @@ DisplayState *init_displaystate(void) gchar *name; int i; - if (!display_state) { - display_state = g_new0(DisplayState, 1); - } - + get_alloc_displaystate(); for (i = 0; i < nb_consoles; i++) { if (consoles[i]->console_type != GRAPHIC_CONSOLE && consoles[i]->ds == NULL) {