diff options
author | Eric S. Raymond <esr@thyrsus.com> | 2010-04-05 12:24:25 -0400 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2010-04-05 12:24:25 -0400 |
commit | f1d0dea4ce72f8e49eefcec94c2daf325358d809 (patch) | |
tree | 90dcc79d0ea8cfe5e3695850b46441bb7a93f095 | |
parent | 386841833f71bee00c8a8f1cbab4b91622964b41 (diff) | |
download | gpsd-f1d0dea4ce72f8e49eefcec94c2daf325358d809.tar.gz |
Document the data-management problem underlying ckuethe's POLL bug.
All regression tests pass.
-rw-r--r-- | gpsd.c | 7 | ||||
-rw-r--r-- | libgpsd_core.c | 7 |
2 files changed, 14 insertions, 0 deletions
@@ -1104,6 +1104,13 @@ static void handle_request(struct subscriber_t *sub, for (devp = devices; devp < devices + MAXDEVICES; devp++) { if (allocated_device(devp) && subscribed(sub, devp)) { if ((devp->observed & GPS_TYPEMASK)!=0) { + /* + * Architectural problem: This is going to see just the + * data dropped in during the last gps_poll() call. + * What we really need to do is have the drivers put + * new data someplace other than devp->gpsdata.fix, so + * that it can be returned to use for accumulated fix data. + */ json_tpv_dump(&devp->gpsdata, reply + strlen(reply), replylen - strlen(reply)); diff --git a/libgpsd_core.c b/libgpsd_core.c index abb7215f..f38f14c2 100644 --- a/libgpsd_core.c +++ b/libgpsd_core.c @@ -580,6 +580,13 @@ gps_mask_t gpsd_poll(struct gps_device_t *session) ssize_t newlen; bool first_sync = false; + /* + * This looks strange, but it works because the + * gpsdata.fix buffer has been pressed into service + * as a place for the drivers to drop new data. + * The last accumulated fix actually lives in + * fixbuffer now. This should probably be fixed. + */ gps_clear_fix(&session->gpsdata.fix); #ifdef TIMING_ENABLE |