Patchwork [1/3] use lazy initialization for display_state

login
register
mail settings
Submitter Paolo Bonzini
Date Feb. 10, 2010, 11:29 p.m.
Message ID <1265844597-29941-2-git-send-email-pbonzini@redhat.com>
Download mbox | patch
Permalink /patch/45074/
State New
Headers show

Comments

Paolo Bonzini - Feb. 10, 2010, 11:29 p.m.
Ensure initialization of a dumb display, if needed, by making
all accesses go through get_displaystate.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 vl.c |   29 +++++++++++++++--------------
 1 files changed, 15 insertions(+), 14 deletions(-)
Anthony Liguori - Feb. 19, 2010, 9:28 p.m.
On 02/10/2010 05:29 PM, Paolo Bonzini wrote:
> Ensure initialization of a dumb display, if needed, by making
> all accesses go through get_displaystate.
>
> Signed-off-by: Paolo Bonzini<pbonzini@redhat.com>
>    

Applied all.  Thanks.

Regards,

Anthony Liguori

> ---
>   vl.c |   29 +++++++++++++++--------------
>   1 files changed, 15 insertions(+), 14 deletions(-)
>
> diff --git a/vl.c b/vl.c
> index 5ddf1fe..94aeb5e 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -2568,6 +2568,16 @@ struct DisplayAllocator default_allocator = {
>       defaultallocator_free_displaysurface
>   };
>
> +/* dumb display */
> +
> +static void dumb_display_init(void)
> +{
> +    DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
> +    ds->allocator =&default_allocator;
> +    ds->surface = qemu_create_displaysurface(ds, 640, 480);
> +    register_displaystate(ds);
> +}
> +
>   void register_displaystate(DisplayState *ds)
>   {
>       DisplayState **s;
> @@ -2580,6 +2590,9 @@ void register_displaystate(DisplayState *ds)
>
>   DisplayState *get_displaystate(void)
>   {
> +    if (!display_state) {
> +        dumb_display_init();
> +    }
>       return display_state;
>   }
>
> @@ -2589,16 +2602,6 @@ DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *
>       return ds->allocator;
>   }
>
> -/* dumb display */
> -
> -static void dumb_display_init(void)
> -{
> -    DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
> -    ds->allocator =&default_allocator;
> -    ds->surface = qemu_create_displaysurface(ds, 640, 480);
> -    register_displaystate(ds);
> -}
> -
>   /***********************************************************/
>   /* I/O handling */
>
> @@ -5871,10 +5874,8 @@ int main(int argc, char **argv, char **envp)
>       if (qemu_opts_foreach(&qemu_device_opts, device_init_func, NULL, 1) != 0)
>           exit(1);
>
> -    if (!display_state)
> -        dumb_display_init();
>       /* just use the first displaystate for the moment */
> -    ds = display_state;
> +    ds = get_displaystate();
>
>       if (display_type == DT_DEFAULT) {
>   #if defined(CONFIG_SDL) || defined(CONFIG_COCOA)
> @@ -5932,7 +5933,7 @@ int main(int argc, char **argv, char **envp)
>           qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
>       }
>
> -    text_consoles_set_display(display_state);
> +    text_consoles_set_display(ds);
>
>       if (qemu_opts_foreach(&qemu_mon_opts, mon_init_func, NULL, 1) != 0)
>           exit(1);
>

Patch

diff --git a/vl.c b/vl.c
index 5ddf1fe..94aeb5e 100644
--- a/vl.c
+++ b/vl.c
@@ -2568,6 +2568,16 @@  struct DisplayAllocator default_allocator = {
     defaultallocator_free_displaysurface
 };
 
+/* dumb display */
+
+static void dumb_display_init(void)
+{
+    DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
+    ds->allocator = &default_allocator;
+    ds->surface = qemu_create_displaysurface(ds, 640, 480);
+    register_displaystate(ds);
+}
+
 void register_displaystate(DisplayState *ds)
 {
     DisplayState **s;
@@ -2580,6 +2590,9 @@  void register_displaystate(DisplayState *ds)
 
 DisplayState *get_displaystate(void)
 {
+    if (!display_state) {
+        dumb_display_init();
+    }
     return display_state;
 }
 
@@ -2589,16 +2602,6 @@  DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *
     return ds->allocator;
 }
 
-/* dumb display */
-
-static void dumb_display_init(void)
-{
-    DisplayState *ds = qemu_mallocz(sizeof(DisplayState));
-    ds->allocator = &default_allocator;
-    ds->surface = qemu_create_displaysurface(ds, 640, 480);
-    register_displaystate(ds);
-}
-
 /***********************************************************/
 /* I/O handling */
 
@@ -5871,10 +5874,8 @@  int main(int argc, char **argv, char **envp)
     if (qemu_opts_foreach(&qemu_device_opts, device_init_func, NULL, 1) != 0)
         exit(1);
 
-    if (!display_state)
-        dumb_display_init();
     /* just use the first displaystate for the moment */
-    ds = display_state;
+    ds = get_displaystate();
 
     if (display_type == DT_DEFAULT) {
 #if defined(CONFIG_SDL) || defined(CONFIG_COCOA)
@@ -5932,7 +5933,7 @@  int main(int argc, char **argv, char **envp)
         qemu_mod_timer(nographic_timer, qemu_get_clock(rt_clock));
     }
 
-    text_consoles_set_display(display_state);
+    text_consoles_set_display(ds);
 
     if (qemu_opts_foreach(&qemu_mon_opts, mon_init_func, NULL, 1) != 0)
         exit(1);