[Scummvm-git-logs] scummvm master -> 15ee7ba98aa36099eda1c12bd35ddb14ec17367e
rvanlaar
noreply at scummvm.org
Sat Sep 24 21:21:52 UTC 2022
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:
15ee7ba98a DIRECTOR: LINGO: fix memory leaks for lingo tests
Commit: 15ee7ba98aa36099eda1c12bd35ddb14ec17367e
https://github.com/scummvm/scummvm/commit/15ee7ba98aa36099eda1c12bd35ddb14ec17367e
Author: Roland van Laar (roland at rolandvanlaar.nl)
Date: 2022-09-24T23:21:38+02:00
Commit Message:
DIRECTOR: LINGO: fix memory leaks for lingo tests
The Lingo tests were failing because of memory leaks.
- `move` overwrote an existing cast without deleting it
- `puppetTransition` was set but not removed on class destruction
- the *.lingo test files were opened but never removed
Changed paths:
engines/director/cast.cpp
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo.cpp
engines/director/window.cpp
diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 454862efe93..3a3a7695205 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -204,6 +204,8 @@ CastMember *Cast::setCastMember(CastMemberID castId, CastMember *cast) {
bool Cast::eraseCastMember(CastMemberID castId) {
if (_loadedCast->contains(castId.member)) {
+ CastMember *member = _loadedCast->getVal(castId.member);
+ delete member;
_loadedCast->erase(castId.member);
return true;
}
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 5d77c51306f..64e2d39ee87 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1885,8 +1885,8 @@ void LB::b_findEmpty(int nargs) {
Datum res;
if (d.u.cast->member > c_end) {
- d.type = INT;
- g_lingo->push(d);
+ res = d.u.cast->member;
+ g_lingo->push(res);
return;
}
@@ -2173,9 +2173,10 @@ void LB::b_move(int nargs) {
movie->getScore()->renderFrame(frame, kRenderForceUpdate);
+ g_director->getCurrentMovie()->eraseCastMember(dest.asMemberID());
+
CastMember *toMove = g_director->getCurrentMovie()->getCastMember(src.asMemberID());
- CastMember *toReplace = new CastMember(*toMove);
- toReplace->_type = kCastTypeNull;
+ CastMember *toReplace = new CastMember(toMove->getCast(), src.asMemberID().member);
g_director->getCurrentMovie()->createOrReplaceCastMember(dest.asMemberID(), toMove);
g_director->getCurrentMovie()->createOrReplaceCastMember(src.asMemberID(), toReplace);
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 716a05628be..51454cd5913 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -1293,6 +1293,7 @@ void Lingo::runTests() {
counter++;
}
+ delete stream;
inFile.close();
}
diff --git a/engines/director/window.cpp b/engines/director/window.cpp
index 96d71e73b5c..cc2efe6b983 100644
--- a/engines/director/window.cpp
+++ b/engines/director/window.cpp
@@ -76,6 +76,8 @@ Window::~Window() {
delete _macBinary;
_macBinary = nullptr;
}
+ if (_puppetTransition)
+ delete _puppetTransition;
for (auto &it: _callstack) {
delete it;
More information about the Scummvm-git-logs
mailing list