From: ian Date: Sun, 4 May 2008 22:38:16 +0000 (+0000) Subject: tolerate SignallingHorizonReached in new detection X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=fccd8ca3a4a86422b2683985489bff63169d5525;p=trains.git tolerate SignallingHorizonReached in new detection --- diff --git a/hostside/safety.c b/hostside/safety.c index c4ef91c..ebe7b49 100644 --- a/hostside/safety.c +++ b/hostside/safety.c @@ -364,7 +364,9 @@ static int nose_nextseg(TrackLocation *t, TrackAdvanceContext *c, /* 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) { @@ -457,10 +459,10 @@ static int tail_nextseg(TrackLocation *t, TrackAdvanceContext *c, 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; } @@ -726,7 +728,7 @@ ErrorCode predict(Train *tra, int accelerate, 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 */ diff --git a/hostside/speed.c b/hostside/speed.c index d32e73a..8e491cc 100644 --- a/hostside/speed.c +++ b/hostside/speed.c @@ -102,7 +102,7 @@ ErrorCode speedmanager_speedchange_request(Train *tra, int step, 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);