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

Proposed by Benedikt Straub
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
GunChleoc Approve
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.
Revision history for this message
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.

Revision history for this message
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
Revision history for this message
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.

Revision history for this message
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.

Revision history for this message
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
=== 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 @@
3333
34function check_empire()34function check_empire()
35 while true do35 while true do
36 sleep(1000)
36 for idx,field in ipairs(all_fields) do37 for idx,field in ipairs(all_fields) do
37 sleep(5)38 sleep(5)
38 local p1c = false39 local p1c = false
@@ -272,9 +273,9 @@
272 while not p3.defeated do sleep(4513) end273 while not p3.defeated do sleep(4513) end
273 set_objective_done(o)274 set_objective_done(o)
274275
275 -- If the barbarians already defeated Murilius – well done276 -- If the barbarians already defeated Murilius – well done.
276 -- Otherwise, Murilius provokes Reebaud into ordering the player to conquer his entire colony277 -- Otherwise, Murilius provokes Reebaud into ordering the player to conquer his entire colony
277 -- (merely defeating the Empire isn’t enough)278 -- (merely defeating the Empire isn’t enough).
278 -- We don't bother to check water, walkable-only and other useless terrains.279 -- We don't bother to check water, walkable-only and other useless terrains.
279 -- That would be really too much to ask from our poor player, now wouldn't it?280 -- That would be really too much to ask from our poor player, now wouldn't it?
280 if not p2.defeated then281 if not p2.defeated then
@@ -285,6 +286,7 @@
285 o = add_campaign_objective(obj_defeat_murilius)286 o = add_campaign_objective(obj_defeat_murilius)
286 local def = false287 local def = false
287 while not def do288 while not def do
289 sleep(1000)
288 def = true290 def = true
289 for idx,field in ipairs(useful_fields) do291 for idx,field in ipairs(useful_fields) do
290 if field.owner == p2 then292 if field.owner == p2 then

Subscribers

People subscribed via source and target branches

to status/vote changes: