From c5812d39a5b410a00ae4f167e82b3cb977f1865e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 27 Jun 2007 12:10:46 +0000 Subject: [PATCH] * no longer reschedule after releasing the bits lock. * LockBits() now fails with B_BUSY in case the current buffer is NULL. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21513 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/interface/Bitmap.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/kits/interface/Bitmap.cpp b/src/kits/interface/Bitmap.cpp index 67e27405fb..fff0748599 100644 --- a/src/kits/interface/Bitmap.cpp +++ b/src/kits/interface/Bitmap.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2006, Haiku Inc. + * Copyright 2001-2007, Haiku Inc. * Distributed under the terms of the MIT License. * * Authors: @@ -420,6 +420,12 @@ BBitmap::LockBits(uint32 *state) status = acquire_sem(data->lock); } while (status == B_INTERRUPTED); + if (data->buffer == NULL) { + // the app_server does not grant us access to the frame buffer + // right now - let's release the lock and fail + release_sem_etc(data->lock, 1, B_DO_NOT_RESCHEDULE); + return B_BUSY; + } return status; } @@ -442,7 +448,7 @@ BBitmap::UnlockBits() return; overlay_client_data* data = (overlay_client_data*)fBasePointer; - release_sem(data->lock); + release_sem_etc(data->lock, 1, B_DO_NOT_RESCHEDULE); }