From 576365627a6ed8ba3fede9de1dce675a94747e48 Mon Sep 17 00:00:00 2001 From: orwell96 Date: Thu, 21 Nov 2019 14:59:39 +0100 Subject: Fix scheduler crash (H#133) for loops don't work with manipulating i --- advtrains_line_automation/scheduler.lua | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'advtrains_line_automation') diff --git a/advtrains_line_automation/scheduler.lua b/advtrains_line_automation/scheduler.lua index 3d8778a..8afaa55 100644 --- a/advtrains_line_automation/scheduler.lua +++ b/advtrains_line_automation/scheduler.lua @@ -90,7 +90,7 @@ function sched.enqueue(rwtime, handler, evtdata, unitid, unitlim) ucn = (units_cnt[unitid] or 0) local ulim=(unitlim or UNITS_THRESH) if ucn >= ulim then - atwarn("[lines][scheduler] discarding enqueue for",handler,"(limit",ulim,") because unit",unitid,"has already",ucn,"schedules enqueued") + atlog("[lines][scheduler] discarding enqueue for",handler,"(limit",ulim,") because unit",unitid,"has already",ucn,"schedules enqueued") return false end @@ -118,10 +118,12 @@ end -- Discards all schedules for unit "unitid" (removes them from the queue) function sched.discard_all(unitid) - for i=1,#queue do + local i = 1 + while i<=#queue do if queue[i].u == unitid then table.remove(queue,i) - i=i-1 + else + i=i+1 end end units_cnt[unitid] = 0 -- cgit v1.2.3