If resolving a loop means advancing further than 2*Vehicle.ArrivalRadius, the previous code would always stall. This change means that we will always resolve a loop no matter how loopy it is (usually max 2/3 iterations).
I came across this case quite often for some reason and I realised because it only tried to advance once, if that didn't work, it would never resolve it. Making it a while loop works and is guaranteed to exit in edge cases since it's bounded by the path length.
If resolving a loop means advancing further than 2*Vehicle.ArrivalRadius, the previous code would always stall. This change means that we will always resolve a loop no matter how loopy it is (usually max 2/3 iterations).
I came across this case quite often for some reason and I realised because it only tried to advance once, if that didn't work, it would never resolve it. Making it a while loop works and is guaranteed to exit in edge cases since it's bounded by the path length.