[Scummvm-git-logs] scummvm master -> 4469101724ccc04e7f06e43028120119abf6e68a

AndywinXp noreply at scummvm.org
Sun Sep 24 17:28:01 UTC 2023


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
4469101724 SWORD1: Make MemoryManager more robust to crashes


Commit: 4469101724ccc04e7f06e43028120119abf6e68a
    https://github.com/scummvm/scummvm/commit/4469101724ccc04e7f06e43028120119abf6e68a
Author: AndywinXp (andywinxp at gmail.com)
Date: 2023-09-24T19:27:57+02:00

Commit Message:
SWORD1: Make MemoryManager more robust to crashes

This will also make my life easier when debugging...

Changed paths:
    engines/sword1/memman.cpp


diff --git a/engines/sword1/memman.cpp b/engines/sword1/memman.cpp
index d8b7b6223e0..e59c37a5c61 100644
--- a/engines/sword1/memman.cpp
+++ b/engines/sword1/memman.cpp
@@ -74,24 +74,33 @@ void MemMan::setCondition(MemHandle *bsMem, uint16 pCond) {
 }
 
 void MemMan::flush() {
-	while (_memListFree) {
-		free(_memListFreeEnd->data);
-		_memListFreeEnd->data = NULL;
-		_memListFreeEnd->cond = MEM_FREED;
-		_alloced -= _memListFreeEnd->size;
-		removeFromFreeList(_memListFreeEnd);
+	if (_memListFree && !_memListFreeEnd) {
+		warning("MemMan::flush(): _memListFreeEnd is nullptr");
+	} else {
+		while (_memListFree) {
+			free(_memListFreeEnd->data);
+			_memListFreeEnd->data = NULL;
+			_memListFreeEnd->cond = MEM_FREED;
+			_alloced -= _memListFreeEnd->size;
+			removeFromFreeList(_memListFreeEnd);
+		}
 	}
+
 	if (_alloced)
 		warning("MemMan::flush: Something's wrong: still %d bytes alloced", _alloced);
 }
 
 void MemMan::checkMemoryUsage() {
-	while ((_alloced > MAX_ALLOC) && _memListFree) {
-		free(_memListFreeEnd->data);
-		_memListFreeEnd->data = NULL;
-		_memListFreeEnd->cond = MEM_FREED;
-		_alloced -= _memListFreeEnd->size;
-		removeFromFreeList(_memListFreeEnd);
+	if ((_alloced > MAX_ALLOC) && _memListFree && !_memListFreeEnd) {
+		warning("MemMan::checkMemoryUsage(): _memListFreeEnd is nullptr");
+	} else {
+		while ((_alloced > MAX_ALLOC) && _memListFree) {
+			free(_memListFreeEnd->data);
+			_memListFreeEnd->data = NULL;
+			_memListFreeEnd->cond = MEM_FREED;
+			_alloced -= _memListFreeEnd->size;
+			removeFromFreeList(_memListFreeEnd);
+		}
 	}
 }
 




More information about the Scummvm-git-logs mailing list