1
0
Fork 0

Fix a possible crash

This commit is contained in:
daveluff 2004-03-16 10:35:29 +00:00
parent 3d65e2dac9
commit 738b81dc49

View file

@ -599,17 +599,19 @@ void FGTower::ProcessDownwindReport(TowerPlaneRec* t) {
int a = 0; // Count of preceding planes on approach int a = 0; // Count of preceding planes on approach
bool cf = false; // conflicting traffic on final bool cf = false; // conflicting traffic on final
bool cc = false; // preceding traffic in circuit bool cc = false; // preceding traffic in circuit
TowerPlaneRec* tc;
for(tower_plane_rec_list_iterator twrItr = circuitList.begin(); twrItr != circuitList.end(); twrItr++) { for(tower_plane_rec_list_iterator twrItr = circuitList.begin(); twrItr != circuitList.end(); twrItr++) {
if((*twrItr)->plane.callsign == responseID) break; if((*twrItr)->plane.callsign == responseID) break;
tc = *twrItr;
++i; ++i;
} }
if(i > 1) { cc = true; } if(i > 1) { cc = true; }
doThresholdETACalc(); doThresholdETACalc();
TowerPlaneRec* tt; TowerPlaneRec* tf;
for(tower_plane_rec_list_iterator twrItr = appList.begin(); twrItr != appList.end(); twrItr++) { for(tower_plane_rec_list_iterator twrItr = appList.begin(); twrItr != appList.end(); twrItr++) {
if((*twrItr)->eta < (t->eta + 45)) { if((*twrItr)->eta < (t->eta + 45)) {
a++; a++;
tt = *twrItr; tf = *twrItr;
cf = true; cf = true;
// This should set the flagged plane to be the last conflicting one, and hence the one to follow. // This should set the flagged plane to be the last conflicting one, and hence the one to follow.
// It ignores the fact that we might have problems slotting into the approach traffic behind it - // It ignores the fact that we might have problems slotting into the approach traffic behind it -
@ -621,11 +623,23 @@ void FGTower::ProcessDownwindReport(TowerPlaneRec* t) {
trns += ConvertNumToSpokenDigits(i + a); trns += ConvertNumToSpokenDigits(i + a);
// This assumes that the number spoken is landing position, not circuit position, since some of the traffic might be on straight-in final. // This assumes that the number spoken is landing position, not circuit position, since some of the traffic might be on straight-in final.
trns += " "; trns += " ";
TowerPlaneRec* tt;
if((i == 1) && (!rwyList.size()) && (t->nextOnRwy) && (!cf)) { // Unfortunately nextOnRwy currently doesn't handle circuit/straight-in ordering properly at present, hence the cf check below. if((i == 1) && (!rwyList.size()) && (t->nextOnRwy) && (!cf)) { // Unfortunately nextOnRwy currently doesn't handle circuit/straight-in ordering properly at present, hence the cf check below.
trns += "Cleared to land"; // TODO - clear for the option if appropriate trns += "Cleared to land"; // TODO - clear for the option if appropriate
t->clearedToLand = true; t->clearedToLand = true;
if(!t->isUser) t->planePtr->RegisterTransmission(7); if(!t->isUser) t->planePtr->RegisterTransmission(7);
} else if((i+a) > 1) { } else if((i+a) > 1) {
//First set tt to point to the correct preceding plane - final or circuit
if(i > 1 && a > 0) {
tt = (tf->eta < tc->eta ? tf : tc);
} else if(i > 1) {
tt = tc;
} else if(a > 0) {
tt = tf;
} else {
// We should never get here!
SG_LOG(SG_ATC, SG_ALERT, "ALERT - Logic error in FGTower::ProcessDownwindReport");
}
trns += "Follow the "; trns += "Follow the ";
string s = tt->plane.callsign; string s = tt->plane.callsign;
int p = s.find('-'); int p = s.find('-');