]> git.tdb.fi Git - r2c2.git/commitdiff
Avoid infinite loops in VehiclePlacement in certain situations
authorMikko Rasa <tdb@tdb.fi>
Fri, 9 Aug 2013 10:32:14 +0000 (13:32 +0300)
committerMikko Rasa <tdb@tdb.fi>
Fri, 9 Aug 2013 10:32:14 +0000 (13:32 +0300)
source/libr2c2/vehicleplacement.cpp

index 9f9001fb0b7562c073b5c99634d5b98793d40a93..5bf989927745a827e7686019ba53fe70553491a6 100644 (file)
@@ -51,6 +51,9 @@ VehiclePlacement::VehiclePlacement(const VehicleType &t):
 
 void VehiclePlacement::place(const TrackOffsetIter &p, Anchor a)
 {
+       if(!p)
+               return unplace();
+
        float anchor = get_anchor_position(a);
 
        for(vector<Axle>::iterator i=axles.begin(); i!=axles.end(); ++i)
@@ -246,9 +249,9 @@ float VehiclePlacement::compute_adjustment(const Vector &p1, const Vector &p2, f
        float span = distance(p1, p2);
        float adjust = target-span;
 
-       /* If the adjustment is larger than the last one, we've hit a gap or
+       /* If the adjustment is not smaller than the last one, we've hit a gap or
        other oddity in the track.  Terminate to avoid an infinite loop. */
-       if(last>0 && abs(adjust)>last)
+       if(last>0 && abs(adjust)>=last)
                return 0;
 
        if(abs(adjust)*10000<target)