fixed stack lock at startup

svn-id: r8779
This commit is contained in:
Max Horn 2003-07-05 15:28:28 +00:00
parent 8a7d540687
commit ce9d154957
5 changed files with 14 additions and 10 deletions

View file

@ -148,7 +148,7 @@ void OSystem_SDL_Common::copy_rect(const byte *buf, int pitch, int x, int y, int
if (_screen == NULL)
return;
StackLock lock(_graphicsMutex); // Lock the mutex until this function ends
StackLock lock(_graphicsMutex, this); // Lock the mutex until this function ends
if (((uint32)buf & 3) == 0 && pitch == _screenWidth && x==0 && y==0 &&
w==_screenWidth && h==_screenHeight && _mode_flags&DF_WANT_RECT_OPTIM) {
@ -1229,7 +1229,7 @@ void OSystem_SDL_Common::clear_overlay() {
if (!_overlayVisible)
return;
StackLock lock(_graphicsMutex); // Lock the mutex until this function ends
StackLock lock(_graphicsMutex, this); // Lock the mutex until this function ends
// hide the mouse
undraw_mouse();

View file

@ -210,7 +210,7 @@ void OSystem_SDL::hotswap_gfx_mode() {
void OSystem_SDL::update_screen() {
assert(_hwscreen != NULL);
StackLock lock(_graphicsMutex); // Lock the mutex until this function ends
StackLock lock(_graphicsMutex, this); // Lock the mutex until this function ends
// If the shake position changed, fill the dirty area with blackness
if (_currentShakePos != _newShakePos) {
@ -336,7 +336,7 @@ void OSystem_SDL::update_screen() {
uint32 OSystem_SDL::property(int param, Property *value) {
StackLock lock(_graphicsMutex); // Lock the mutex until this function ends
StackLock lock(_graphicsMutex, this); // Lock the mutex until this function ends
if (param == PROP_TOGGLE_FULLSCREEN) {
assert(_hwscreen != 0);

View file

@ -348,7 +348,7 @@ void OSystem_SDL_OpenGL::hotswap_gfx_mode() {
void OSystem_SDL_OpenGL::update_screen() {
StackLock lock(_graphicsMutex); // Lock the mutex until this function ends
StackLock lock(_graphicsMutex, this); // Lock the mutex until this function ends
// If the shake position changed, fill the dirty area with blackness
if (_currentShakePos != _newShakePos) {
@ -548,7 +548,7 @@ bool OSystem_SDL_OpenGL::poll_event(Event *event) {
uint32 OSystem_SDL_OpenGL::property(int param, Property *value) {
StackLock lock(_graphicsMutex); // Lock the mutex until this function ends
StackLock lock(_graphicsMutex, this); // Lock the mutex until this function ends
if (param == PROP_TOGGLE_FULLSCREEN) {
if (!_usingOpenGL)

View file

@ -166,7 +166,10 @@ uint RandomSource::getRandomNumberRng(uint min, uint max) {
return getRandomNumber(max - min) + min;
}
StackLock::StackLock(OSystem::MutexRef mutex) : _mutex(mutex) {
StackLock::StackLock(OSystem::MutexRef mutex, OSystem *syst)
: _mutex(mutex), _syst(syst) {
if (syst == 0)
_syst = g_system;
lock();
}
@ -175,12 +178,12 @@ StackLock::~StackLock() {
}
void StackLock::lock() {
assert(g_system);
assert(_syst);
g_system->lock_mutex(_mutex);
}
void StackLock::unlock() {
assert(g_system);
assert(_syst);
g_system->unlock_mutex(_mutex);
}

View file

@ -80,10 +80,11 @@ public:
*/
class StackLock {
OSystem::MutexRef _mutex;
OSystem *_syst;
void lock();
void unlock();
public:
StackLock(OSystem::MutexRef mutex);
StackLock(OSystem::MutexRef mutex, OSystem *syst = 0);
~StackLock();
};