chiark / gitweb /
tolerate SignallingHorizonReached in new detection
authorian <ian>
Sun, 4 May 2008 22:38:16 +0000 (22:38 +0000)
committerian <ian>
Sun, 4 May 2008 22:38:16 +0000 (22:38 +0000)
hostside/safety.c
hostside/speed.c

index c4ef91c6a2040f8cea244a9d2586334ac8c3f019..ebe7b49ee340c1cb17e2df432139073d3f886909 100644 (file)
@@ -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 */
 
index d32e73ad418bbb4795190bae6f43bf640304353a..8e491ccc1ffeac7ad9edbacde2a6f62111029ee5 100644 (file)
@@ -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);