chiark / gitweb /
polarise the interferer too
authorian <ian>
Mon, 5 May 2008 10:57:27 +0000 (10:57 +0000)
committerian <ian>
Mon, 5 May 2008 10:57:27 +0000 (10:57 +0000)
hostside/safety.c

index a8a58de0b8aa97e7f522845808dc740cc62ff509..d21a05d3de2bdb5fd57c341d22d35e5862a8195f 100644 (file)
@@ -782,8 +782,19 @@ ErrorCode predict(Train *tra, int accelerate,
     }
     if (u.need_polarise && seg->will_polarise) {
       seg->seg_inverted= seg->tr_backwards ^ u.train_polarity_inverted;
-      if (seg->i->invertible) actual_inversions_segment(seg);
-      else assert(!seg->seg_inverted);
+      if (seg->i->invertible) {
+       actual_inversions_segment(seg);
+       Segment *interferer= segment_interferes(0,seg);
+       if (interferer && !interferer->will_polarise &&
+           interferer->i->invertible) {
+         /* no provision for interfering invertible segments
+          * with opposing ideas about neutral polarity */
+         interferer->seg_inverted= seg->seg_inverted;
+         actual_inversions_segment(interferer);
+       }
+      } else {
+       assert(!seg->seg_inverted);
+      }
     }
     seg->now_present= seg->pred_present=
       seg->pred_vacated= seg->will_polarise= 0;