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
This commit is contained in:
parent
144e1fc4e0
commit
c8788e6ca7
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue