1
0
Fork 0

Fix crash with missing airport in ATC

Sentry-Id: FLIGHTGEAR-ER
This commit is contained in:
James Turner 2020-10-23 15:39:42 +01:00
parent e0bd74e982
commit 3b01aaf33f
2 changed files with 23 additions and 18 deletions

View file

@ -615,30 +615,32 @@ void FGATCController::transmit(FGTrafficRecord * rec, FGAirportDynamics *parent,
}
SG_LOG(SG_ATC, SG_DEBUG, "transmitting for: " << sender << "Leg = " << rec->getLeg());
auto depApt = rec->getAircraft()->getTrafficRef()->getDepartureAirport();
switch (rec->getLeg()) {
case 1:
case 2:
// avoid crash FLIGHTGEAR-ER
if (!depApt) {
SG_LOG(SG_ATC, SG_DEV_ALERT, "TrafficRec has empty departure airport, can't transmit");
return;
}
freqId = rec->getNextFrequency();
stationFreq =
rec->getAircraft()->getTrafficRef()->getDepartureAirport()->
getDynamics()->getGroundFrequency(rec->getLeg() + freqId);
taxiFreq =
rec->getAircraft()->getTrafficRef()->getDepartureAirport()->
getDynamics()->getGroundFrequency(2);
towerFreq =
rec->getAircraft()->getTrafficRef()->getDepartureAirport()->
getDynamics()->getTowerFrequency(2);
receiver =
rec->getAircraft()->getTrafficRef()->getDepartureAirport()->
getName() + "-Ground";
atisInformation =
rec->getAircraft()->getTrafficRef()->getDepartureAirport()->
getDynamics()->getAtisSequence();
stationFreq = depApt->getDynamics()->getGroundFrequency(rec->getLeg() + freqId);
taxiFreq = depApt->getDynamics()->getGroundFrequency(2);
towerFreq = depApt->getDynamics()->getTowerFrequency(2);
receiver = depApt->getName() + "-Ground";
atisInformation = depApt->getDynamics()->getAtisSequence();
break;
case 3:
receiver =
rec->getAircraft()->getTrafficRef()->getDepartureAirport()->
getName() + "-Tower";
if (!depApt) {
SG_LOG(SG_ATC, SG_DEV_ALERT, "TrafficRec has empty departure airport, can't transmit");
return;
}
receiver = depApt->getName() + "-Tower";
break;
}

View file

@ -103,6 +103,9 @@ FGAirportDynamicsRef AirportDynamicsManager::find(const std::string &icao)
FGAirportDynamicsRef AirportDynamicsManager::find(const FGAirportRef& apt)
{
if (!apt)
return {};
return find(apt->ident());
}