Fix crashes:

1. when train hit a route, nil access to already cancelled route caused crash
2. fix crash when trying to ensure_init a train that doesn't exist
master
orwell96 2018-12-10 22:57:16 +01:00
parent 144e1fc4e0
commit c8788e6ca7
2 changed files with 20 additions and 13 deletions

View File

@ -222,6 +222,12 @@ local callbacks_remove, run_callbacks_remove = mkcallback("remove")
-- - save files were loaded
-- Additionally, this gets called outside the step cycle to initialize and/or remove a train, then occ_write_mode is set.
function advtrains.train_ensure_init(id, train)
if not train then
atwarn("train_ensure_init: Called with id =",id,"but a nil train!")
atwarn(debug.traceback())
return nil
end
train.dirty = true
if train.no_step then return nil end

View File

@ -85,19 +85,20 @@ local function setsection(tid, train, ts_id, ts, sigd)
atwarn("Train",tid,"hit route",ts.route.rsn,"!")
advtrains.interlocking.route.cancel_route_from(ts.route.origin)
atwarn("Route was cancelled.")
end
-- train entered route regularily. Reset route and signal
tcbs.route_committed = nil
tcbs.route_comitted = nil -- TODO compatibility cleanup
tcbs.aspect = nil
tcbs.route_origin = nil
advtrains.interlocking.update_signal_aspect(tcbs)
if tcbs.signal and sigd_equal(ts.route.entry, ts.route.origin) then
if tcbs.route_auto and tcbs.routeset then
--atdebug("Resetting route (",ts.route.origin,")")
advtrains.interlocking.route.update_route(ts.route.origin, tcbs)
else
tcbs.routeset = nil
else
-- train entered route regularily. Reset route and signal
tcbs.route_committed = nil
tcbs.route_comitted = nil -- TODO compatibility cleanup
tcbs.aspect = nil
tcbs.route_origin = nil
advtrains.interlocking.update_signal_aspect(tcbs)
if tcbs.signal and sigd_equal(ts.route.entry, ts.route.origin) then
if tcbs.route_auto and tcbs.routeset then
--atdebug("Resetting route (",ts.route.origin,")")
advtrains.interlocking.route.update_route(ts.route.origin, tcbs)
else
tcbs.routeset = nil
end
end
end
ts.route = nil