@@ -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",
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 <dbaryshkov@gmail.com> --- 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",