From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=35677 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PvJCg-00011J-FU for qemu-devel@nongnu.org; Thu, 03 Mar 2011 19:49:11 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PvJCf-00027q-AJ for qemu-devel@nongnu.org; Thu, 03 Mar 2011 19:49:10 -0500 Received: from mail-fx0-f45.google.com ([209.85.161.45]:36188) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PvJCf-00027d-19 for qemu-devel@nongnu.org; Thu, 03 Mar 2011 19:49:09 -0500 Received: by fxm11 with SMTP id 11so1833912fxm.4 for ; Thu, 03 Mar 2011 16:49:08 -0800 (PST) From: Dmitry Eremin-Solenikov Date: Fri, 4 Mar 2011 03:48:01 +0300 Message-Id: <1299199682-22041-1-git-send-email-dbaryshkov@gmail.com> Subject: [Qemu-devel] [PATCH 1/2][RESEND] vl: initialize all displaystates List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.orgqemu-devel@nongnu.org Init not only first displaystate, but all. Otherwise machines with multiple display devices (e.g. tosa, as it exists now) will just segfault on ds switch. Signed-off-by: Dmitry Eremin-Solenikov --- vl.c | 104 +++++++++++++++++++++++++++++++++--------------------------------- 1 files changed, 52 insertions(+), 52 deletions(-) Basically this patch is equal to: @@ -3009,9 +3009,7 @@ int main(int argc, char **argv, char **envp) net_check_clients(); - /* just use the first displaystate for the moment */ - ds = get_displaystate(); - + for (ds = get_displaystate(); ds; ds = ds->next) { if (using_spice) display_remote++; if (display_type == DT_DEFAULT && !display_remote) { @@ -3077,7 +3075,9 @@ int main(int argc, char **argv, char **envp) nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL); qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock)); } - text_consoles_set_display(ds); + } + + text_consoles_set_display(get_displaystate()); if (gdbstub_dev && gdbserver_start(gdbstub_dev) < 0) { fprintf(stderr, "qemu: could not open gdbserver on device '%s'\n", diff --git a/vl.c b/vl.c index 14255c4..b8cd455 100644 --- a/vl.c +++ b/vl.c @@ -3009,75 +3009,75 @@ int main(int argc, char **argv, char **envp) net_check_clients(); - /* just use the first displaystate for the moment */ - ds = get_displaystate(); - - if (using_spice) - display_remote++; - if (display_type == DT_DEFAULT && !display_remote) { + for (ds = get_displaystate(); ds; ds = ds->next) { + if (using_spice) + display_remote++; + if (display_type == DT_DEFAULT && !display_remote) { #if defined(CONFIG_SDL) || defined(CONFIG_COCOA) - display_type = DT_SDL; + display_type = DT_SDL; #else - vnc_display = "localhost:0,to=99"; - show_vnc_port = 1; + vnc_display = "localhost:0,to=99"; + show_vnc_port = 1; #endif - } - + } + - /* init local displays */ - switch (display_type) { - case DT_NOGRAPHIC: - break; + /* init local displays */ + switch (display_type) { + case DT_NOGRAPHIC: + break; #if defined(CONFIG_CURSES) - case DT_CURSES: - curses_display_init(ds, full_screen); - break; + case DT_CURSES: + curses_display_init(ds, full_screen); + break; #endif #if defined(CONFIG_SDL) - case DT_SDL: - sdl_display_init(ds, full_screen, no_frame); - break; + case DT_SDL: + sdl_display_init(ds, full_screen, no_frame); + break; #elif defined(CONFIG_COCOA) - case DT_SDL: - cocoa_display_init(ds, full_screen); - break; + case DT_SDL: + cocoa_display_init(ds, full_screen); + break; #endif - default: - break; - } + default: + break; + } - /* init remote displays */ - if (vnc_display) { - vnc_display_init(ds); - if (vnc_display_open(ds, vnc_display) < 0) - exit(1); + /* init remote displays */ + if (vnc_display) { + vnc_display_init(ds); + if (vnc_display_open(ds, vnc_display) < 0) + exit(1); - if (show_vnc_port) { - printf("VNC server running on `%s'\n", vnc_display_local_addr(ds)); + if (show_vnc_port) { + printf("VNC server running on `%s'\n", vnc_display_local_addr(ds)); + } } - } #ifdef CONFIG_SPICE - if (using_spice && !qxl_enabled) { - qemu_spice_display_init(ds); - } + if (using_spice && !qxl_enabled) { + qemu_spice_display_init(ds); + } #endif - /* display setup */ - dpy_resize(ds); - dcl = ds->listeners; - while (dcl != NULL) { - if (dcl->dpy_refresh != NULL) { - ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds); - qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock)); - break; + /* display setup */ + dpy_resize(ds); + dcl = ds->listeners; + while (dcl != NULL) { + if (dcl->dpy_refresh != NULL) { + ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds); + qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock)); + break; + } + dcl = dcl->next; + } + if (ds->gui_timer == NULL) { + nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL); + qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock)); } - dcl = dcl->next; - } - if (ds->gui_timer == NULL) { - nographic_timer = qemu_new_timer(rt_clock, nographic_update, NULL); - qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock)); } - text_consoles_set_display(ds); + + text_consoles_set_display(get_displaystate()); if (gdbstub_dev && gdbserver_start(gdbstub_dev) < 0) { fprintf(stderr, "qemu: could not open gdbserver on device '%s'\n", -- 1.7.2.3