Merge lp:~widelands-dev/widelands/bug-1831583-fri02 into lp:widelands

Proposed by Benedikt Straub on 2019-06-04
Status: Merged
Merged at revision: 9142
Proposed branch: lp:~widelands-dev/widelands/bug-1831583-fri02
Merge into: lp:widelands
Diff against target: 31 lines (+4/-2)
1 file modified
data/campaigns/fri02.wmf/scripting/mission_thread.lua (+4/-2)
To merge this branch: bzr merge lp:~widelands-dev/widelands/bug-1831583-fri02
Reviewer Review Type Date Requested Status
hessenfarmer Approve on 2019-06-05
GunChleoc 2019-06-04 Approve on 2019-06-05
Review via email: mp+368348@code.launchpad.net

Commit message

Add some sleep time to costly loops in fri02 to prevent freezing

Description of the change

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.

To post a comment you must log in.
bunnybot (widelandsofficial) wrote :

Continuous integration builds have changed state:

Travis build 5152. State: errored. Details: https://travis-ci.org/widelands/widelands/builds/541383420.
Appveyor build 4934. State: success. Details: https://ci.appveyor.com/project/widelands-dev/widelands/build/_widelands_dev_widelands_bug_1831583_fri02-4934.

GunChleoc (gunchleoc) wrote :

We have these sleep times a lot in our Lua scripts for checking loops, so let's have it :)

@bunnybot merge

review: Approve
bunnybot (widelandsofficial) wrote :

Refusing to merge, since Travis is not green. Use @bunnybot merge force for merging anyways.

Travis build 5152. State: errored. Details: https://travis-ci.org/widelands/widelands/builds/541383420.

hessenfarmer (stephan-lutz) wrote :

regarding these objectives a 1 second delay does not matter at all. for me even 2 or 3 seconds would be hardly recognizable by the player. so we could even go up with the sleep if necessary.

hessenfarmer (stephan-lutz) wrote :

Wow 3 times the inputqueues faiklure in one build seems to be a new record.

@bunnybot merge force

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'data/campaigns/fri02.wmf/scripting/mission_thread.lua'
2--- data/campaigns/fri02.wmf/scripting/mission_thread.lua 2019-03-29 18:29:54 +0000
3+++ data/campaigns/fri02.wmf/scripting/mission_thread.lua 2019-06-04 18:05:55 +0000
4@@ -33,6 +33,7 @@
5
6 function check_empire()
7 while true do
8+ sleep(1000)
9 for idx,field in ipairs(all_fields) do
10 sleep(5)
11 local p1c = false
12@@ -272,9 +273,9 @@
13 while not p3.defeated do sleep(4513) end
14 set_objective_done(o)
15
16- -- If the barbarians already defeated Murilius – well done
17+ -- If the barbarians already defeated Murilius – well done.
18 -- Otherwise, Murilius provokes Reebaud into ordering the player to conquer his entire colony
19- -- (merely defeating the Empire isn’t enough)
20+ -- (merely defeating the Empire isn’t enough).
21 -- We don't bother to check water, walkable-only and other useless terrains.
22 -- That would be really too much to ask from our poor player, now wouldn't it?
23 if not p2.defeated then
24@@ -285,6 +286,7 @@
25 o = add_campaign_objective(obj_defeat_murilius)
26 local def = false
27 while not def do
28+ sleep(1000)
29 def = true
30 for idx,field in ipairs(useful_fields) do
31 if field.owner == p2 then