[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 1/2] vl: initialize all displaystates
From: |
Dmitry Eremin-Solenikov |
Subject: |
[Qemu-devel] [PATCH 1/2] vl: initialize all displaystates |
Date: |
Fri, 4 Feb 2011 20:34:09 +0300 |
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 <address@hidden>
---
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
- [Qemu-devel] [PATCH 1/2] vl: initialize all displaystates,
Dmitry Eremin-Solenikov <=