From patchwork Tue May 1 05:53:08 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: sdl: Avoid unnecessary resizing of the display surface Date: Mon, 30 Apr 2012 19:53:08 -0000 From: Stefan Weil X-Patchwork-Id: 156009 Message-Id: <1335851588-21011-1-git-send-email-sw@weilnetz.de> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Anthony Liguori , Stefan Weil If neither width nor height changes, nothing has to be done. Cc: Anthony Liguori Signed-off-by: Stefan Weil --- This patch improves SDL for any host (for example with remote X displays), but the main reason why I wrote it was another problem: On w32 / w64 hosts, qemu-system-arm has a deadlock when it calls sdl_resize_displaysurface during Linux boot. One thread waits for a critical region, another thread waits inside SDL_SetVideoMode. The patch avoids this problem. Paolo, maybe you have an idea what could cause the deadlock. Debugging on wxx is terrible - up to now, I did not succeed in analysing the lock situation with gdb. Regards, Stefan W. ui/sdl.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ui/sdl.c b/ui/sdl.c index 8700b7a..8c1c71c 100644 --- a/ui/sdl.c +++ b/ui/sdl.c @@ -224,8 +224,11 @@ static void sdl_free_displaysurface(DisplaySurface *surface) static DisplaySurface* sdl_resize_displaysurface(DisplaySurface *surface, int width, int height) { - sdl_free_displaysurface(surface); - return sdl_create_displaysurface(width, height); + if (surface->width != width || surface->height != height) { + sdl_free_displaysurface(surface); + surface = sdl_create_displaysurface(width, height); + } + return surface; } /* generic keyboard conversion */