void safety_notify_detection(Segment *seg) {
Train *tra;
ErrorCode ec;
+ Segment *interferer;
if (seg->det_ignore) return;
- if (!seg->det_expected)
- safety_panic(0,seg, "unexpected detection");
+ if (!seg->det_expected) {
+ interferer= segment_interferes(0,seg);
+ if (!interferer) safety_panic(0,seg, "unexpected detection");
+ if (interferer->det_ignore) return;
+ if (!interferer->det_expected)
+ safety_panic(0,seg, "unexpected detection, perhaps really at %s",
+ interferer->i->pname);
+ oprintf(DUPO("safety") "detection %s using interferer %s",
+ seg->i->pname, interferer->i->pname);
+ seg= interferer;
+ }
tra= seg->owner;
if (seg->movposcomb < 0)