diff options
author | rubidium <rubidium@openttd.org> | 2009-05-16 20:10:58 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2009-05-16 20:10:58 +0000 |
commit | 814f153b5a98e0030cbd221e6a89e083ce62bb1d (patch) | |
tree | 40602001a89a18ca50cafcaeb0e3403f28d0fb8a /src/yapf | |
parent | 8324cfc875ce26eb7d8cfed42290bf8e20e7c3fc (diff) | |
download | openttd-814f153b5a98e0030cbd221e6a89e083ce62bb1d.tar.xz |
(svn r16323) -Fix [FS#2900]: desyncs due to the fact that depot searching with a maximum search depth simply does not work with YAPF's caches.
Diffstat (limited to 'src/yapf')
-rw-r--r-- | src/yapf/yapf_costrail.hpp | 4 | ||||
-rw-r--r-- | src/yapf/yapf_rail.cpp | 10 |
2 files changed, 14 insertions, 0 deletions
diff --git a/src/yapf/yapf_costrail.hpp b/src/yapf/yapf_costrail.hpp index a622d2671..b4792db87 100644 --- a/src/yapf/yapf_costrail.hpp +++ b/src/yapf/yapf_costrail.hpp @@ -54,6 +54,10 @@ protected: }; protected: + /** + * @note maximum cost doesn't work with caching enabled + * @todo fix maximum cost failing with caching (e.g. FS#2900) + */ int m_max_cost; CBlobT<int> m_sig_look_ahead_costs; bool m_disable_cache; diff --git a/src/yapf/yapf_rail.cpp b/src/yapf/yapf_rail.cpp index e053f4c8d..09f672605 100644 --- a/src/yapf/yapf_rail.cpp +++ b/src/yapf/yapf_rail.cpp @@ -213,6 +213,16 @@ public: static bool stFindNearestDepotTwoWay(const Vehicle *v, TileIndex t1, Trackdir td1, TileIndex t2, Trackdir td2, int max_distance, int reverse_penalty, TileIndex *depot_tile, bool *reversed) { Tpf pf1; + /* + * With caching enabled it simply cannot get a reliable result when you + * have limited the distance a train may travel. This means that the + * cached result does not match uncached result in all cases and that + * causes desyncs. So disable caching when finding for a depot that is + * nearby. This only happens with automatic servicing of vehicles, + * so it will only impact performance when you do not manually set + * depot orders and you do not disable automatic servicing. + */ + if (max_distance != 0) pf1.DisableCache(true); bool result1 = pf1.FindNearestDepotTwoWay(v, t1, td1, t2, td2, max_distance, reverse_penalty, depot_tile, reversed); #if DEBUG_YAPF_CACHE |