diff options
author | Sebastian Leske <sebastian.leske@sleske.name> | 2015-10-26 08:12:40 +0100 |
---|---|---|
committer | Sebastian Leske <sebastian.leske@sleske.name> | 2015-10-27 16:33:13 +0100 |
commit | 3203adf409379d7893cd4ef96e12b27a492d1d71 (patch) | |
tree | 9f7b26d5e0802b4d2a2d7c97f67e08041f2c4e7b /navit/vehicle | |
parent | 7dc21344072cb7e5aef19c8b25291a61aaa20f82 (diff) | |
download | navit-3203adf409379d7893cd4ef96e12b27a492d1d71.tar.gz |
vehicle_gpsd:Read all pending data on every poll.R6323
When the system is overloaded, we may lag behind reading the reports
streamed by gpsd. To mitigate this, read all pending reports during
every poll, and only process the latest report. There is no point in
processing a GPS report if a later report is already waiting on the
socket. Fixes trac #1332.
Diffstat (limited to 'navit/vehicle')
-rw-r--r-- | navit/vehicle/gpsd/vehicle_gpsd.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/navit/vehicle/gpsd/vehicle_gpsd.c b/navit/vehicle/gpsd/vehicle_gpsd.c index f7f5616f9..73d9e648d 100644 --- a/navit/vehicle/gpsd/vehicle_gpsd.c +++ b/navit/vehicle/gpsd/vehicle_gpsd.c @@ -318,7 +318,11 @@ vehicle_gpsd_io(struct vehicle_priv *priv) if (priv->gps) { vehicle_last = priv; #if GPSD_API_MAJOR_VERSION >= 5 - if(gps_read(priv->gps)==-1) { + int read_result; + /* Read until EOF, in case we are lagging behind. + * No point in processing old GPS reports. */ + while((read_result=gps_read(priv->gps))>0); + if(read_result==-1) { dbg(lvl_error,"gps_poll failed\n"); vehicle_gpsd_close(priv); vehicle_gpsd_open(priv); |