widelands-dev team mailing list archive
Mailing list archive
[Merge] lp:~widelands-dev/widelands/bug-1831583-fri02 into lp:widelands
Benedikt Straub has proposed merging lp:~widelands-dev/widelands/bug-1831583-fri02 into lp:widelands.
Add some sleep time to costly loops in fri02 to prevent freezing
Widelands Developers (widelands-dev)
Bug #1831583 in widelands: "Crash in Frisians 2"
For more details, see:
This is a Lua problem. gdb shows that masses of new Lua objects are created, and Lua doesn´t care to release the memory again. Hopefully, some additional sleep() will give the game and the garbage collector time to catch up.
I don´t want to fix this by increasing the base sleep time or the objective will be marked done only after an enormous delay.
Another way to fix the bug while perhaps improving performance would be to move the checks to C++, but I feel bad about having such specialised functions there.
Your team Widelands Developers is requested to review the proposed merge of lp:~widelands-dev/widelands/bug-1831583-fri02 into lp:widelands.
=== modified file 'data/campaigns/fri02.wmf/scripting/mission_thread.lua'
--- data/campaigns/fri02.wmf/scripting/mission_thread.lua 2019-03-29 18:29:54 +0000
+++ data/campaigns/fri02.wmf/scripting/mission_thread.lua 2019-06-04 18:05:55 +0000
@@ -33,6 +33,7 @@
while true do
for idx,field in ipairs(all_fields) do
local p1c = false
@@ -272,9 +273,9 @@
while not p3.defeated do sleep(4513) end
- -- If the barbarians already defeated Murilius – well done
+ -- If the barbarians already defeated Murilius – well done.
-- Otherwise, Murilius provokes Reebaud into ordering the player to conquer his entire colony
- -- (merely defeating the Empire isn’t enough)
+ -- (merely defeating the Empire isn’t enough).
-- We don't bother to check water, walkable-only and other useless terrains.
-- That would be really too much to ask from our poor player, now wouldn't it?
if not p2.defeated then
@@ -285,6 +286,7 @@
o = add_campaign_objective(obj_defeat_murilius)
local def = false
while not def do
def = true
for idx,field in ipairs(useful_fields) do
if field.owner == p2 then