[Spice-devel] [PATCH] client: don't crash when booting a Xinerama setup
Hans de Goede
hdegoede at redhat.com
Fri Sep 16 01:05:34 PDT 2011
Looks good to me, ACK.
On 09/16/2011 09:58 AM, Christophe Fergeau wrote:
> In a Xinerama setup, when X starts up and creates one of the
> secondary screens, first a non-primary surface is created on the
> secondary screen, and then the primary surface for this screen is
> created.
> This causes a crash when the guest uses Xinerama and the client
> is attached to the VM before X starts (ie while the guest is
> booting).
> This happens because DisplayChannel::create_canvas (which is called
> when creating a non-primary surface) assumes a screen has already been
> set for the DisplayChannel while this only happens upon primary surface
> creation. However, it uses the screen for non important stuff, so we
> can test if screen() is non NULL before using it. This is what is done
> in other parts of this file.
>
> Fixes rhbz #732423
> ---
> client/display_channel.cpp | 10 ++++++----
> 1 files changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/client/display_channel.cpp b/client/display_channel.cpp
> index 3b8b91a..5ab7493 100644
> --- a/client/display_channel.cpp
> +++ b/client/display_channel.cpp
> @@ -1165,13 +1165,15 @@ void DisplayChannel::create_canvas(int surface_id, const std::vector<int>& canva
> #endif
> unsigned int i;
>
> + if (screen()) {
> #ifdef USE_OPENGL
> - if (screen()->need_recreate_context_gl()) {
> - recreate = false;
> - }
> + if (screen()->need_recreate_context_gl()) {
> + recreate = false;
> + }
> #endif
>
> - screen()->set_update_interrupt_trigger(NULL);
> + screen()->set_update_interrupt_trigger(NULL);
> + }
>
> for (i = 0; i< canvas_types.size(); i++) {
>
More information about the Spice-devel
mailing list