zeenix pushed to geoclue2 (f21). "Backport fixes from 2.2.0"

notifications at fedoraproject.org notifications at fedoraproject.org
Fri Apr 17 15:50:56 UTC 2015


>From addc5b8eb236c6c0fd9c3de03190bd3b78aa7ddd Mon Sep 17 00:00:00 2001
From: "Zeeshan Ali (Khattak)" <zeeshanak at gnome.org>
Date: Fri, 17 Apr 2015 16:46:04 +0100
Subject: Backport fixes from 2.2.0


diff --git a/geoclue2.spec b/geoclue2.spec
index 860b57f..c0c51e2 100644
--- a/geoclue2.spec
+++ b/geoclue2.spec
@@ -1,12 +1,21 @@
 Name:           geoclue2
 Version:        2.1.10
-Release:        1%{?dist}
+Release:        2%{?dist}
 Summary:        Geolocation service
 
 License:        GPLv2+
 URL:            http://www.freedesktop.org/wiki/Software/GeoClue/
 Source0:        http://www.freedesktop.org/software/geoclue/releases/2.1/geoclue-%{version}.tar.xz
 
+# Fixes from 2.2.0
+Patch01: locator-Correct-source-accuracy-comparison.patch
+Patch02: service-client-Delay-unrefing-ServiceLocation.patch
+Patch03: modem-gps-Fix-GPS-coordinates-parsing.patch
+Patch04: service-client-Gracefully-handle-NULL-agent.patch
+Patch05: modem-manager-Don-t-enable-the-modem.patch
+Patch06: wifi-Remove-a-redundant-condition.patch
+Patch07: modem-manager-Wait-for-modem-to-be-enabled.patch
+
 BuildRequires:  glib2-devel
 BuildRequires:  intltool
 BuildRequires:  itstool
@@ -41,6 +50,13 @@ use %{name}.
 %prep
 %setup -q -n geoclue-%{version}
 
+%patch01 -p1 -b .locator-Correct-source-accuracy-comparison
+%patch02 -p1 -b .service-client-Delay-unrefing-ServiceLocation
+%patch03 -p1 -b .modem-gps-Fix-GPS-coordinates-parsing
+%patch04 -p1 -b .service-client-Gracefully-handle-NULL-agent
+%patch05 -p1 -b .modem-manager-Don-t-enable-the-modem
+%patch06 -p1 -b .wifi-Remove-a-redundant-condition
+%patch07 -p1 -b .modem-manager-Wait-for-modem-to-be-enabled
 
 %build
 %configure --with-dbus-service-user=geoclue
@@ -96,6 +112,9 @@ exit 0
 
 
 %changelog
+* Fri Apr 17 2015 Zeeshan Ali <zeenix at redhat.com> 2.1.10-2
+- Backport fixes from 2.2.0.
+
 * Wed Apr  1 2015 Zeeshan Ali <zeenix at redhat.com> 2.1.10-1
 - Update to 2.1.10
 
diff --git a/locator-Correct-source-accuracy-comparison.patch b/locator-Correct-source-accuracy-comparison.patch
new file mode 100644
index 0000000..b8d752b
--- /dev/null
+++ b/locator-Correct-source-accuracy-comparison.patch
@@ -0,0 +1,29 @@
+From 76ba63f3cc55912e7d7886c0806640c5c6b726db Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice at bellet.info>
+Date: Wed, 25 Mar 2015 16:08:34 +0100
+Subject: [PATCH 4/7] locator: Correct source accuracy comparison
+
+We now stop sources whose accuracy level becomes higher, rather than
+lower, than the requested level.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=89716
+---
+ src/gclue-locator.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/gclue-locator.c b/src/gclue-locator.c
+index 42ce395..91df67e 100644
+--- a/src/gclue-locator.c
++++ b/src/gclue-locator.c
+@@ -184,7 +184,7 @@ on_avail_accuracy_level_changed (GObject    *gobject,
+             !is_source_active (locator, src)) {
+                 start_source (locator, src);
+         } else if ((level == GCLUE_ACCURACY_LEVEL_NONE ||
+-                    priv->accuracy_level > level) &&
++                    priv->accuracy_level < level) &&
+                    is_source_active (locator, src)) {
+                 g_signal_handlers_disconnect_by_func (G_OBJECT (src),
+                                                       G_CALLBACK (on_location_changed),
+-- 
+2.1.0
+
diff --git a/modem-gps-Fix-GPS-coordinates-parsing.patch b/modem-gps-Fix-GPS-coordinates-parsing.patch
new file mode 100644
index 0000000..be007ef
--- /dev/null
+++ b/modem-gps-Fix-GPS-coordinates-parsing.patch
@@ -0,0 +1,48 @@
+From fea6f1844d2c8dc13f94da5af1aea10430ad8ede Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice at bellet.info>
+Date: Wed, 25 Mar 2015 14:52:30 +0100
+Subject: [PATCH 3/7] modem-gps: Fix GPS coordinates parsing
+
+Latitude and longitude don't have the same number of digits
+on the left side of the decimal point in the GGA NMEA sentence.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=89715
+---
+ src/gclue-modem-gps.c | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/src/gclue-modem-gps.c b/src/gclue-modem-gps.c
+index 7f1338f..5295fe3 100644
+--- a/src/gclue-modem-gps.c
++++ b/src/gclue-modem-gps.c
+@@ -215,6 +215,8 @@ parse_coordinate_string (const char *coordinate,
+ {
+         gdouble minutes, degrees, out;
+         gchar *degrees_str;
++        gchar *dot_str;
++        gint dot_offset;
+ 
+         if (coordinate[0] == '\0' ||
+             direction[0] == '\0' ||
+@@ -230,11 +232,16 @@ parse_coordinate_string (const char *coordinate,
+                 return INVALID_COORDINATE;
+         }
+ 
+-        degrees_str = g_strndup (coordinate, 2);
++        dot_str = g_strstr_len (coordinate, 6, ".");
++        if (dot_str == NULL)
++                return INVALID_COORDINATE;
++        dot_offset = dot_str - coordinate;
++
++        degrees_str = g_strndup (coordinate, dot_offset - 2);
+         degrees = g_ascii_strtod (degrees_str, NULL);
+         g_free (degrees_str);
+ 
+-        minutes = g_ascii_strtod (coordinate + 2, NULL);
++        minutes = g_ascii_strtod (coordinate + dot_offset - 2, NULL);
+ 
+         /* Include the minutes as part of the degrees */
+         out = degrees + (minutes / 60.0);
+-- 
+2.1.0
+
diff --git a/modem-manager-Don-t-enable-the-modem.patch b/modem-manager-Don-t-enable-the-modem.patch
new file mode 100644
index 0000000..642772e
--- /dev/null
+++ b/modem-manager-Don-t-enable-the-modem.patch
@@ -0,0 +1,79 @@
+From 4492e5066e786acc9e9ba86079ccce352a27df81 Mon Sep 17 00:00:00 2001
+From: "Zeeshan Ali (Khattak)" <zeeshanak at gnome.org>
+Date: Thu, 2 Apr 2015 18:40:29 +0100
+Subject: [PATCH 6/7] modem-manager: Don't enable the modem
+
+Seems at least GNOME takes care of modem enabling for us and besides
+this shouldn't be done by geoclue anyway (see bug#85040).
+
+https://bugs.freedesktop.org/show_bug.cgi?id=85305
+---
+ src/gclue-modem-manager.c | 45 +++++++++------------------------------------
+ 1 file changed, 9 insertions(+), 36 deletions(-)
+
+diff --git a/src/gclue-modem-manager.c b/src/gclue-modem-manager.c
+index cce3065..71ab96d 100644
+--- a/src/gclue-modem-manager.c
++++ b/src/gclue-modem-manager.c
+@@ -410,38 +410,6 @@ out:
+ }
+ 
+ static void
+-on_modem_enabled (GObject      *modem_object,
+-                  GAsyncResult *res,
+-                  gpointer      user_data)
+-{
+-        GTask *task = G_TASK (user_data);
+-        GClueModemManagerPrivate *priv;
+-        MMModemLocationSource caps;
+-        GError *error = NULL;
+-
+-        if (!mm_modem_enable_finish (MM_MODEM (modem_object), res, &error)) {
+-                if (error->code == MM_CORE_ERROR_IN_PROGRESS)
+-                        /* Seems a previous async call hasn't returned yet. */
+-                        g_task_return_boolean (task, TRUE);
+-                else
+-                        g_task_return_error (task, error);
+-                g_object_unref (task);
+-
+-                return;
+-        }
+-        priv = GCLUE_MODEM_MANAGER (g_task_get_source_object (task))->priv;
+-        g_debug ("manager '%s' enabled.", mm_object_get_path (priv->mm_object));
+-
+-        caps = mm_modem_location_get_enabled (priv->modem_location) | priv->caps;
+-        mm_modem_location_setup (priv->modem_location,
+-                                 caps,
+-                                 TRUE,
+-                                 g_task_get_cancellable (task),
+-                                 on_modem_location_setup,
+-                                 task);
+-}
+-
+-static void
+ enable_caps (GClueModemManager    *manager,
+              MMModemLocationSource caps,
+              GCancellable         *cancellable,
+@@ -454,10 +422,15 @@ enable_caps (GClueModemManager    *manager,
+         priv->caps |= caps;
+         task = g_task_new (manager, cancellable, callback, user_data);
+ 
+-        mm_modem_enable (priv->modem,
+-                         cancellable,
+-                         on_modem_enabled,
+-                         task);
++        priv = GCLUE_MODEM_MANAGER (g_task_get_source_object (task))->priv;
++
++        caps = mm_modem_location_get_enabled (priv->modem_location) | priv->caps;
++        mm_modem_location_setup (priv->modem_location,
++                                 caps,
++                                 TRUE,
++                                 g_task_get_cancellable (task),
++                                 on_modem_location_setup,
++                                 task);
+ }
+ 
+ static gboolean
+-- 
+2.1.0
+
diff --git a/modem-manager-Wait-for-modem-to-be-enabled.patch b/modem-manager-Wait-for-modem-to-be-enabled.patch
new file mode 100644
index 0000000..a0149c8
--- /dev/null
+++ b/modem-manager-Wait-for-modem-to-be-enabled.patch
@@ -0,0 +1,101 @@
+From 428063526f6bf032c2ecba28cd41865d9a5661fa Mon Sep 17 00:00:00 2001
+From: "Zeeshan Ali (Khattak)" <zeeshanak at gnome.org>
+Date: Wed, 1 Apr 2015 20:22:20 +0100
+Subject: [PATCH 7/7] modem-manager: Wait for modem to be enabled
+
+Modem's location capabilities won't be known until its enabled.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=85305
+---
+ src/gclue-modem-manager.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 57 insertions(+), 1 deletion(-)
+
+diff --git a/src/gclue-modem-manager.c b/src/gclue-modem-manager.c
+index 71ab96d..d48c0cb 100644
+--- a/src/gclue-modem-manager.c
++++ b/src/gclue-modem-manager.c
+@@ -484,16 +484,72 @@ modem_has_caps (GClueModemManager    *manager,
+ static void
+ on_mm_object_added (GDBusObjectManager *object_manager,
+                     GDBusObject        *object,
++                    gpointer            user_data);
++
++static void
++on_mm_modem_state_notify (GObject    *gobject,
++                          GParamSpec *pspec,
++                          gpointer    user_data)
++{
++        MMModem *mm_modem = MM_MODEM (gobject);
++        GClueModemManager *manager = GCLUE_MODEM_MANAGER (user_data);
++        GClueModemManagerPrivate *priv = manager->priv;
++        GDBusObjectManager *obj_manager = G_DBUS_OBJECT_MANAGER (priv->manager);
++        const char *path = mm_modem_get_path (mm_modem);
++        GDBusObject *object;
++
++        if (priv->mm_object != NULL) {
++                // In the meantime another modem with location caps was found.
++                g_signal_handlers_disconnect_by_func (mm_modem,
++                                                      on_mm_modem_state_notify,
++                                                      user_data);
++                g_object_unref (gobject);
++
++                return;
++        }
++
++        if (mm_modem_get_state (mm_modem) < MM_MODEM_STATE_ENABLED)
++                return;
++
++        g_debug ("Modem '%s' now enabled", path);
++
++        g_signal_handlers_disconnect_by_func (mm_modem,
++                                              on_mm_modem_state_notify,
++                                              user_data);
++
++        object = g_dbus_object_manager_get_object (obj_manager, path);
++        on_mm_object_added (obj_manager, object, user_data);
++        g_object_unref (mm_modem);
++}
++
++static void
++on_mm_object_added (GDBusObjectManager *object_manager,
++                    GDBusObject        *object,
+                     gpointer            user_data)
+ {
+         MMObject *mm_object = MM_OBJECT (object);
+         GClueModemManager *manager = GCLUE_MODEM_MANAGER (user_data);
++        MMModem *mm_modem;
+         MMModemLocation *modem_location;
+ 
+         if (manager->priv->mm_object != NULL)
+                 return;
+ 
+         g_debug ("New modem '%s'", mm_object_get_path (mm_object));
++        mm_modem = mm_object_get_modem (mm_object);
++        if (mm_modem_get_state (mm_modem) < MM_MODEM_STATE_ENABLED) {
++                g_debug ("Modem '%s' not enabled",
++                         mm_object_get_path (mm_object));
++
++                g_signal_connect_object (mm_modem,
++                                         "notify::state",
++                                         G_CALLBACK (on_mm_modem_state_notify),
++                                         manager,
++                                         0);
++
++                return;
++        }
++
+         modem_location = mm_object_peek_modem_location (mm_object);
+         if (modem_location == NULL)
+                 return;
+@@ -502,7 +558,7 @@ on_mm_object_added (GDBusObjectManager *object_manager,
+                  mm_object_get_path (mm_object));
+ 
+         manager->priv->mm_object = g_object_ref (mm_object);
+-        manager->priv->modem = mm_object_get_modem (mm_object);
++        manager->priv->modem = mm_modem;
+         manager->priv->modem_location = mm_object_get_modem_location (mm_object);
+ 
+         g_signal_connect (G_OBJECT (manager->priv->modem_location),
+-- 
+2.1.0
+
diff --git a/service-client-Delay-unrefing-ServiceLocation.patch b/service-client-Delay-unrefing-ServiceLocation.patch
new file mode 100644
index 0000000..e494ca8
--- /dev/null
+++ b/service-client-Delay-unrefing-ServiceLocation.patch
@@ -0,0 +1,48 @@
+From 775211c190a01269aa731922f31b54b0451c7ce1 Mon Sep 17 00:00:00 2001
+From: "Zeeshan Ali (Khattak)" <zeeshanak at gnome.org>
+Date: Wed, 1 Apr 2015 18:24:32 +0100
+Subject: [PATCH 5/7] service-client: Delay unrefing ServiceLocation
+
+Lets try to ensure that apps are not still accessing the last location
+before unrefing (and therefore destroying) it by delaying the unref
+operation by 5 seconds after a ServiceLocation object becomes obsolete.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=89782
+---
+ src/gclue-service-client.c | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/src/gclue-service-client.c b/src/gclue-service-client.c
+index 0ff3e85..ae22601 100644
+--- a/src/gclue-service-client.c
++++ b/src/gclue-service-client.c
+@@ -138,6 +138,14 @@ below_threshold (GClueServiceClient *client,
+         return FALSE;
+ }
+ 
++static gboolean
++on_prev_location_timeout (gpointer user_data)
++{
++        g_object_unref (user_data);
++
++        return FALSE;
++}
++
+ static void
+ on_locator_location_changed (GObject    *gobject,
+                              GParamSpec *pspec,
+@@ -163,7 +171,10 @@ on_locator_location_changed (GObject    *gobject,
+                 return;
+         }
+ 
+-        g_clear_object (&priv->prev_location);
++        if (priv->prev_location != NULL)
++                // Lets try to ensure that apps are not still accessing the
++                // last location before unrefing (and therefore destroying) it.
++                g_timeout_add_seconds (5, on_prev_location_timeout, priv->prev_location);
+         priv->prev_location = priv->location;
+ 
+         path = next_location_path (client);
+-- 
+2.1.0
+
diff --git a/service-client-Gracefully-handle-NULL-agent.patch b/service-client-Gracefully-handle-NULL-agent.patch
new file mode 100644
index 0000000..c090af3
--- /dev/null
+++ b/service-client-Gracefully-handle-NULL-agent.patch
@@ -0,0 +1,62 @@
+From 07a4f0c0c2e252f8975039a4320d69d04200ac31 Mon Sep 17 00:00:00 2001
+From: "Zeeshan Ali (Khattak)" <zeeshanak at gnome.org>
+Date: Thu, 6 Nov 2014 18:32:28 +0000
+Subject: [PATCH 1/7] service-client: Gracefully handle NULL agent
+
+Don't connect to signals on agent if its NULL. Agent is currently
+entirely optional.
+---
+ src/gclue-service-client.c | 23 +++++++++++++++--------
+ 1 file changed, 15 insertions(+), 8 deletions(-)
+
+diff --git a/src/gclue-service-client.c b/src/gclue-service-client.c
+index c27faac..0ff3e85 100644
+--- a/src/gclue-service-client.c
++++ b/src/gclue-service-client.c
+@@ -385,7 +385,11 @@ gclue_service_client_handle_start (GClueClient           *client,
+                 return TRUE;
+         }
+ 
+-        max_accuracy = gclue_agent_get_max_accuracy_level (priv->agent_proxy);
++        if (priv->agent_proxy != NULL)
++                max_accuracy = gclue_agent_get_max_accuracy_level (priv->agent_proxy);
++        else
++                max_accuracy = GCLUE_ACCURACY_LEVEL_EXACT;
++
+         if (max_accuracy == 0) {
+                 g_dbus_method_invocation_return_error (invocation,
+                                                        G_DBUS_ERROR,
+@@ -429,9 +433,11 @@ gclue_service_client_finalize (GObject *object)
+ 
+         g_clear_pointer (&priv->path, g_free);
+         g_clear_object (&priv->connection);
+-        g_signal_handlers_disconnect_by_func (priv->agent_proxy,
+-                                              G_CALLBACK (on_agent_props_changed),
+-                                              object);
++        if (priv->agent_proxy != NULL)
++                g_signal_handlers_disconnect_by_func
++                                (priv->agent_proxy,
++                                 G_CALLBACK (on_agent_props_changed),
++                                 object);
+         g_clear_object (&priv->agent_proxy);
+         g_clear_object (&priv->locator);
+         g_clear_object (&priv->location);
+@@ -495,10 +501,11 @@ gclue_service_client_set_property (GObject      *object,
+ 
+         case PROP_AGENT_PROXY:
+                 client->priv->agent_proxy = g_value_dup_object (value);
+-                g_signal_connect (client->priv->agent_proxy,
+-                                  "g-properties-changed",
+-                                  G_CALLBACK (on_agent_props_changed),
+-                                  object);
++                if (client->priv->agent_proxy != NULL)
++                        g_signal_connect (client->priv->agent_proxy,
++                                          "g-properties-changed",
++                                          G_CALLBACK (on_agent_props_changed),
++                                          object);
+                 break;
+ 
+         default:
+-- 
+2.1.0
+
diff --git a/wifi-Remove-a-redundant-condition.patch b/wifi-Remove-a-redundant-condition.patch
new file mode 100644
index 0000000..f33b33f
--- /dev/null
+++ b/wifi-Remove-a-redundant-condition.patch
@@ -0,0 +1,32 @@
+From b5f71cefda98277272d483dd4a31c71208dafd5f Mon Sep 17 00:00:00 2001
+From: "Zeeshan Ali (Khattak)" <zeeshanak at gnome.org>
+Date: Thu, 6 Nov 2014 20:21:50 +0000
+Subject: [PATCH 2/7] wifi: Remove a redundant condition
+
+We were only refreshing the location on starting of wifi source if
+requested accuracy level was 'city'. This resulted in clients requesting
+accuracy level other than 'city' to not get any location on machines
+without a wifi card (e.g VMs).
+
+This patches fixes the issue by removing the redundant condition.
+---
+ src/gclue-wifi.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/src/gclue-wifi.c b/src/gclue-wifi.c
+index cf2c455..e94ef04 100644
+--- a/src/gclue-wifi.c
++++ b/src/gclue-wifi.c
+@@ -377,8 +377,7 @@ connect_bss_signals (GClueWifi *wifi)
+         if (priv->bss_added_id != 0)
+                 return;
+         if (priv->interface == NULL) {
+-                if (wifi->priv->accuracy_level == GCLUE_ACCURACY_LEVEL_CITY)
+-                        gclue_web_source_refresh (GCLUE_WEB_SOURCE (wifi));
++                gclue_web_source_refresh (GCLUE_WEB_SOURCE (wifi));
+ 
+                 return;
+         }
+-- 
+2.1.0
+
-- 
cgit v0.10.2


	http://pkgs.fedoraproject.org/cgit/geoclue2.git/commit/?h=f21&id=addc5b8eb236c6c0fd9c3de03190bd3b78aa7ddd


More information about the scm-commits mailing list