Fix:Core:Patch from mattcallow, ticket #68 : Navit goes into tight loop if gpsd socke...
authorkazer_ <kazer_@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Mon, 28 Jan 2008 10:43:08 +0000 (10:43 +0000)
committerkazer_ <kazer_@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Mon, 28 Jan 2008 10:43:08 +0000 (10:43 +0000)
git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk/navit@816 ffa7fe5e-494d-0410-b361-a75ebd5db220

src/vehicle/gpsd/vehicle_gpsd.c

index 8d17334..4820d89 100644 (file)
@@ -85,8 +85,10 @@ vehicle_gpsd_open(struct vehicle_priv *priv)
        } else
                priv->gps = gps_open(source + 7, NULL);
        g_free(source);
-       if (!priv->gps)
+       if (!priv->gps){
+               dbg(0, "gps_open failed. Have you started gpsd?\n");
                return 0;
+       }
        gps_query(priv->gps, "w+x\n");
        gps_set_raw_hook(priv->gps, vehicle_gpsd_callback);
        priv->iochan = g_io_channel_unix_new(priv->gps->gps_fd);
@@ -124,7 +126,11 @@ vehicle_gpsd_io(GIOChannel * iochan, GIOCondition condition, gpointer t)
        if (condition == G_IO_IN) {
                if (priv->gps) {
                        vehicle_last = priv;
-                       gps_poll(priv->gps);
+                        if (gps_poll(priv->gps)) {
+                               dbg(0, "gps_poll failed\n");
+                               vehicle_gpsd_close(priv);
+                               vehicle_gpsd_open(priv);
+                        }
                }
                return TRUE;
        }