[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