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