Message ID | 1335851588-21011-1-git-send-email-sw@weilnetz.de |
---|---|
State | Under Review |
Headers | show |
Il 01/05/2012 07:53, Stefan Weil ha scritto: > If neither width nor height changes, nothing has to be done. > > Cc: Anthony Liguori <aliguori@us.ibm.com> > Signed-off-by: Stefan Weil <sw@weilnetz.de> > --- > > 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. No idea---honestly, my w32 interest is limited to replacing hacks with proper solutions. :) It turns out that in many cases you can fix bugs along the way and that helps having people look at your patches... Paolo
Am 01.05.2012 07:53, schrieb Stefan Weil: > If neither width nor height changes, nothing has to be done. > > Cc: Anthony Liguori<aliguori@us.ibm.com> > Signed-off-by: Stefan Weil<sw@weilnetz.de> > --- > > 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 */ > Please don't apply this patch. It is not complete and can cause a crash (seen on w32 when resizing the SDL window). I'll send an update. Regards, Stefan W.
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 */
If neither width nor height changes, nothing has to be done. Cc: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Stefan Weil <sw@weilnetz.de> --- 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(-)