Skip to content

Commit

Permalink
GPS: Prevent injection from choking the driver (#12710)
Browse files Browse the repository at this point in the history
Sending a continuous stream of injection messages can cause the
GPS driver to get stuck indefinitely in the handling loop.
  • Loading branch information
potaito authored and dagar committed Aug 23, 2019
1 parent 0262a69 commit 2cb26dd
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion src/drivers/gps/gps.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -416,7 +416,15 @@ void GPS::handleInjectDataTopic()
{
bool updated = false;

// Limit maximum number of GPS injections to 6 since usually
// GPS injections should consist of 1-4 packets (GPS, Glonass, Baidu, Galileo).
// Looking at 6 packets thus guarantees, that at least a full injection
// data set is evaluated.
const size_t max_num_injections = 6;
size_t num_injections = 0;

do {
num_injections++;
updated = _orb_inject_data_sub.updated();

if (updated) {
Expand All @@ -431,7 +439,7 @@ void GPS::handleInjectDataTopic()

++_last_rate_rtcm_injection_count;
}
} while (updated);
} while (updated && num_injections < max_num_injections);
}

bool GPS::injectData(uint8_t *data, size_t len)
Expand Down

0 comments on commit 2cb26dd

Please sign in to comment.