/* Is it empty ? */
- if (speedmanager_stopping(u->train) && t->seg->owner != u->train)
+ if (!u->accelerating &&
+ speedmanager_stopping(u->train) &&
+ t->seg->owner != u->train)
return EC_SignallingHorizonReached;
if (t->seg->owner) {
if (!t->seg->i->invertible)
u->noninv_tally[leaving->tr_backwards]--;
- if (t->seg->pred_vacated) return 0; /* only vacate once */
- t->seg->pred_present= 0;
- t->seg->pred_vacated= 1;
- t->seg->until= u->elapsed;
+ if (leaving->pred_vacated) return 0; /* only vacate once */
+ leaving->pred_present= 0;
+ leaving->pred_vacated= 1;
+ leaving->until= u->elapsed;
return 0;
}
u.count_time= 0;
ec= trackloc_advance(&u.nose,&u.nosec);
- if (ec) goto xproblem;
+ if (ec && ec != EC_SignallingHorizonReached) goto xproblem;
/* predict the future */
struct timeval tnow;
double vnow, vtarg;
- oprintf(DUPO("speed") " request %s%s step%d\n",
+ oprintf(DUPO("speed") " request %s%s step %d\n",
tra->backwards?"-":"",tra->pname,
step);