From: ian Date: Mon, 5 May 2008 10:57:27 +0000 (+0000) Subject: polarise the interferer too X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=90330dde6682a428510ac5270c2815cd5280f106;p=trains.git polarise the interferer too --- diff --git a/hostside/safety.c b/hostside/safety.c index a8a58de..d21a05d 100644 --- a/hostside/safety.c +++ b/hostside/safety.c @@ -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;