[Scummvm-git-logs] scummvm master -> 2b38cbc660b5efe3505385a1027413e2b43a38a2
AndywinXp
noreply at scummvm.org
Thu Sep 28 07:20:12 UTC 2023
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
60a1010b10 SWORD1: Add more thread safeness measures to resource manager
2b38cbc660 SWORD1: Ensure thread safeness when blitting cursor
Commit: 60a1010b10d541bc954f7c44a2053961885dc509
https://github.com/scummvm/scummvm/commit/60a1010b10d541bc954f7c44a2053961885dc509
Author: AndywinXp (andywinxp at gmail.com)
Date: 2023-09-28T09:10:26+02:00
Commit Message:
SWORD1: Add more thread safeness measures to resource manager
Changed paths:
engines/sword1/resman.cpp
diff --git a/engines/sword1/resman.cpp b/engines/sword1/resman.cpp
index a1c7da14afd..2c1b0de6b83 100644
--- a/engines/sword1/resman.cpp
+++ b/engines/sword1/resman.cpp
@@ -163,6 +163,7 @@ void ResMan::freeCluDescript() {
}
void ResMan::flush() {
+ Common::StackLock lock(_resourceAccessMutex);
for (uint32 clusCnt = 0; clusCnt < _prj.noClu; clusCnt++) {
Clu *cluster = _prj.clu + clusCnt;
for (uint32 grpCnt = 0; grpCnt < cluster->noGrp; grpCnt++) {
@@ -273,6 +274,7 @@ void ResMan::resOpen(uint32 id) { // load resource ID into memory
}
void ResMan::resClose(uint32 id) {
+ Common::StackLock lock(_resourceAccessMutex);
MemHandle *handle = resHandle(id);
if (!handle)
return;
Commit: 2b38cbc660b5efe3505385a1027413e2b43a38a2
https://github.com/scummvm/scummvm/commit/2b38cbc660b5efe3505385a1027413e2b43a38a2
Author: AndywinXp (andywinxp at gmail.com)
Date: 2023-09-28T09:20:04+02:00
Commit Message:
SWORD1: Ensure thread safeness when blitting cursor
Changed paths:
engines/sword1/mouse.cpp
engines/sword1/mouse.h
engines/sword1/sword1.cpp
diff --git a/engines/sword1/mouse.cpp b/engines/sword1/mouse.cpp
index a326b4cf401..9354f3abbce 100644
--- a/engines/sword1/mouse.cpp
+++ b/engines/sword1/mouse.cpp
@@ -84,6 +84,10 @@ void Mouse::useLogicAndMenu(Logic *pLogic, Menu *pMenu) {
_menu = pMenu;
}
+void Mouse::useScreenMutex(Common::Mutex *mutex) {
+ _screenAccessMutex = mutex;
+}
+
void Mouse::addToList(int id, Object *compact) {
_objList[_numObjs].id = id;
_objList[_numObjs].compact = compact;
@@ -309,7 +313,9 @@ void Mouse::animate() {
uint8 *ptrData = (uint8 *)_currentPtr + sizeof(MousePtr);
ptrData += _frame * _currentPtr->sizeX * _currentPtr->sizeY;
+ _screenAccessMutex->lock();
CursorMan.replaceCursor(ptrData, _currentPtr->sizeX, _currentPtr->sizeY, _currentPtr->hotSpotX, _currentPtr->hotSpotY, 255);
+ _screenAccessMutex->unlock();
_activeFrame = _frame;
}
diff --git a/engines/sword1/mouse.h b/engines/sword1/mouse.h
index f6fdb2f8c5c..b3ef90d32fa 100644
--- a/engines/sword1/mouse.h
+++ b/engines/sword1/mouse.h
@@ -22,6 +22,7 @@
#ifndef SWORD1_MOUSE_H
#define SWORD1_MOUSE_H
+#include "common/mutex.h"
#include "common/scummsys.h"
#include "common/rect.h"
#include "sword1/sworddefs.h"
@@ -73,6 +74,7 @@ public:
void initialize();
void addToList(int id, Object *compact);
void useLogicAndMenu(Logic *pLogic, Menu *pMenu);
+ void useScreenMutex(Common::Mutex *mutex);
void setLuggage(uint32 resID, uint32 rate);
void setPointer(uint32 resID, uint32 rate);
void animate();
@@ -95,6 +97,7 @@ private:
ResMan *_resMan;
ObjectMan *_objMan;
Common::Point _mouse;
+ Common::Mutex *_screenAccessMutex;
uint32 _currentPtrId, _currentLuggageId;
MousePtr *_currentPtr;
diff --git a/engines/sword1/sword1.cpp b/engines/sword1/sword1.cpp
index 12f85737337..1c0ec83a4b1 100644
--- a/engines/sword1/sword1.cpp
+++ b/engines/sword1/sword1.cpp
@@ -106,6 +106,7 @@ Common::Error SwordEngine::init() {
_menu = new Menu(_screen, _mouse);
_logic = new Logic(this, _objectMan, _resMan, _screen, _mouse, _sound, _music, _menu, _system, _mixer);
_mouse->useLogicAndMenu(_logic, _menu);
+ _mouse->useScreenMutex(&_screen->_screenAccessMutex);
syncSoundSettings();
More information about the Scummvm-git-logs
mailing list