[neon/backports-focal/iio-sensor-proxy/Neon/unstable] /: New upstream version 2.2

Ritesh Raj Sarraf null at kde.org
Fri Oct 9 07:46:07 BST 2020


Git commit deafbc929090ee4f95e6bd50bb93f271f3d3d334 by Ritesh Raj Sarraf.
Committed on 04/08/2017 at 10:18.
Pushed by bshah into tag 'Neon/unstable'.

New upstream version 2.2

M  +18   -0    NEWS
M  +32   -14   README
M  +32   -14   README.md
M  +10   -10   configure
M  +1    -1    configure.ac
M  +1    -1    data/80-iio-sensor-proxy.rules
M  +10   -0    data/iio-sensor-proxy.service.in
M  +12   -12   data/net.hadess.SensorProxy.conf
M  +3    -3    docs/Makefile.in
M  +2    -2    src/drv-fake-compass.c
M  +44   -39   src/iio-sensor-proxy.c
M  +8    -3    src/monitor-sensor.c

https://invent.kde.org/neon/backports-focal/iio-sensor-proxy/commit/deafbc929090ee4f95e6bd50bb93f271f3d3d334

diff --git a/NEWS b/NEWS
index bcce427..3566680 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,21 @@
+2.2
+---
+
+This release fixes iio-sensor-proxy not receiving udev events
+because of the excessive lockdown added in version 2.1. This
+also fixes a possible crash on startup due to a race condition.
+
+2.1
+---
+
+This release fixes a security problem that will affect services
+other than iio-sensor-proxy, that have a system D-Bus interface.
+Upgrading to this version is highly recommended.
+
+- Make D-Bus policy rules only affect SensorProxy itself
+- Lockdown service through systemd
+- Fix startup problem on machines with a Compass device
+
 2.0
 ---
 
diff --git a/README b/README
index 679d4c5..dd26ad6 100644
--- a/README
+++ b/README
@@ -13,7 +13,7 @@ Installation
 make
 make install
 ```
-It requires libgudev and systemd.
+It requires libgudev and systemd (>= 233 for the accelerometer quirks).
 
 Usage
 -----
@@ -72,6 +72,20 @@ orientation matches the screen one.
 `ACCEL_MOUNT_MATRIX` udev property. See [60-sensor.hwdb](https://github.com/systemd/systemd/blob/master/hwdb/60-sensor.hwdb)
 for details.
 
+Compass testing
+---------------
+
+Only the Geoclue daemon (as the geoclue user) is allowed to access the `net.hadess.SensorProxy.Compass`
+interface, the results of which it will propagate to clients along with positional information.
+
+If your device does not contain a compass, you can run tests with:
+- If your device does not contain a real compass:
+  - Add FAKE_COMPASS=1 to the environment of `iio-sensor-proxy.service` if your device does not contain a real one
+  - Run the daemon manually with `systemctl start iio-sensor-proxy.service`
+- Verify that iio-sensor-proxy is running with `systemctl` or `ps`
+- As root, get a shell as the `geoclue` user with `su -s /bin/bash geoclue`
+- Run, as the `geoclue` user, `monitor-sensor`
+
 References
 ----------
 
@@ -82,22 +96,26 @@ References
 Tested on
 ---------
 
+- Apple MacBook Air (4,2)
+- Apple MacBook Air (6,2)
+- Apple MacBook Pro (8.2)
+- Asus Transformer Book TP500LB
+- Asus Zenbook UX31A, UX303L, UX305
+- Cube i9
+- Dell Inspiron 13 7000
+- Dell Venue 11 Pro (7140)
+- Dell Venue 8 Pro
+- HP Pavilion X360
+- HP Spectre x360 (Kaby Lake)
 - Lenovo IdeaPad Yoga 13
-- Microsoft Surface Pro 2
-- Lenovo Yoga 2 Pro
+- Lenovo ThinkPad Twist
+- Lenovo X1 Carbon 2014 (rev2)
+- Lenovo X1 Tablet
 - Lenovo Yoga 2 13" and 11"
+- Lenovo Yoga 2 Pro
+- Lenovo Yoga 460
 - Lenovo Yoga 900
+- Microsoft Surface Pro 2
 - Onda v975w
-- Dell Venue 8 Pro
-- Dell Venue 11 Pro (7140)
-- Lenovo ThinkPad Twist
-- MacBook Pro (8.2)
-- Lenovo X1 Carbon 2014 (rev2)
-- MacBook Air (6,2)
-- MacBook Air (4,2)
 - Toshiba Portégé Z10t
 - Toshiba Radius 11 L10WC10C
-- Dell Inspiron 13 7000
-- Cube i9
-- HP Pavilion X360
-- Asus Zenbook UX31A, UX305
diff --git a/README.md b/README.md
index 679d4c5..dd26ad6 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@ Installation
 make
 make install
 ```
-It requires libgudev and systemd.
+It requires libgudev and systemd (>= 233 for the accelerometer quirks).
 
 Usage
 -----
@@ -72,6 +72,20 @@ orientation matches the screen one.
 `ACCEL_MOUNT_MATRIX` udev property. See [60-sensor.hwdb](https://github.com/systemd/systemd/blob/master/hwdb/60-sensor.hwdb)
 for details.
 
+Compass testing
+---------------
+
+Only the Geoclue daemon (as the geoclue user) is allowed to access the `net.hadess.SensorProxy.Compass`
+interface, the results of which it will propagate to clients along with positional information.
+
+If your device does not contain a compass, you can run tests with:
+- If your device does not contain a real compass:
+  - Add FAKE_COMPASS=1 to the environment of `iio-sensor-proxy.service` if your device does not contain a real one
+  - Run the daemon manually with `systemctl start iio-sensor-proxy.service`
+- Verify that iio-sensor-proxy is running with `systemctl` or `ps`
+- As root, get a shell as the `geoclue` user with `su -s /bin/bash geoclue`
+- Run, as the `geoclue` user, `monitor-sensor`
+
 References
 ----------
 
@@ -82,22 +96,26 @@ References
 Tested on
 ---------
 
+- Apple MacBook Air (4,2)
+- Apple MacBook Air (6,2)
+- Apple MacBook Pro (8.2)
+- Asus Transformer Book TP500LB
+- Asus Zenbook UX31A, UX303L, UX305
+- Cube i9
+- Dell Inspiron 13 7000
+- Dell Venue 11 Pro (7140)
+- Dell Venue 8 Pro
+- HP Pavilion X360
+- HP Spectre x360 (Kaby Lake)
 - Lenovo IdeaPad Yoga 13
-- Microsoft Surface Pro 2
-- Lenovo Yoga 2 Pro
+- Lenovo ThinkPad Twist
+- Lenovo X1 Carbon 2014 (rev2)
+- Lenovo X1 Tablet
 - Lenovo Yoga 2 13" and 11"
+- Lenovo Yoga 2 Pro
+- Lenovo Yoga 460
 - Lenovo Yoga 900
+- Microsoft Surface Pro 2
 - Onda v975w
-- Dell Venue 8 Pro
-- Dell Venue 11 Pro (7140)
-- Lenovo ThinkPad Twist
-- MacBook Pro (8.2)
-- Lenovo X1 Carbon 2014 (rev2)
-- MacBook Air (6,2)
-- MacBook Air (4,2)
 - Toshiba Portégé Z10t
 - Toshiba Radius 11 L10WC10C
-- Dell Inspiron 13 7000
-- Cube i9
-- HP Pavilion X360
-- Asus Zenbook UX31A, UX305
diff --git a/configure b/configure
index d3f0324..9b1cfa4 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for iio-sensor-proxy 2.0.
+# Generated by GNU Autoconf 2.69 for iio-sensor-proxy 2.2.
 #
 # Report bugs to <hadess at hadess.net>.
 #
@@ -580,8 +580,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='iio-sensor-proxy'
 PACKAGE_TARNAME='iio-sensor-proxy'
-PACKAGE_VERSION='2.0'
-PACKAGE_STRING='iio-sensor-proxy 2.0'
+PACKAGE_VERSION='2.2'
+PACKAGE_STRING='iio-sensor-proxy 2.2'
 PACKAGE_BUGREPORT='hadess at hadess.net'
 PACKAGE_URL=''
 
@@ -1287,7 +1287,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures iio-sensor-proxy 2.0 to adapt to many kinds of systems.
+\`configure' configures iio-sensor-proxy 2.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1358,7 +1358,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of iio-sensor-proxy 2.0:";;
+     short | recursive ) echo "Configuration of iio-sensor-proxy 2.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1480,7 +1480,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-iio-sensor-proxy configure 2.0
+iio-sensor-proxy configure 2.2
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1581,7 +1581,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by iio-sensor-proxy $as_me 2.0, which was
+It was created by iio-sensor-proxy $as_me 2.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2460,7 +2460,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='iio-sensor-proxy'
- VERSION='2.0'
+ VERSION='2.2'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -6226,7 +6226,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by iio-sensor-proxy $as_me 2.0, which was
+This file was extended by iio-sensor-proxy $as_me 2.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -6283,7 +6283,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-iio-sensor-proxy config.status 2.0
+iio-sensor-proxy config.status 2.2
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index f8ded66..212aae3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,6 @@
 AC_PREREQ(2.59)
 
-AC_INIT([iio-sensor-proxy], [2.0], [hadess at hadess.net])
+AC_INIT([iio-sensor-proxy], [2.2], [hadess at hadess.net])
 
 AX_IS_RELEASE([git-directory])
 
diff --git a/data/80-iio-sensor-proxy.rules b/data/80-iio-sensor-proxy.rules
index c7b3bef..06040dc 100644
--- a/data/80-iio-sensor-proxy.rules
+++ b/data/80-iio-sensor-proxy.rules
@@ -7,7 +7,7 @@ ACTION=="remove", GOTO="iio_sensor_proxy_end"
 SUBSYSTEM=="hwmon", TEST=="light", ENV{IIO_SENSOR_PROXY_TYPE}="hwmon-als"
 SUBSYSTEM=="iio", TEST=="in_accel_x_raw", TEST=="in_accel_y_raw", TEST=="in_accel_z_raw", ENV{IIO_SENSOR_PROXY_TYPE}="iio-poll-accel"
 SUBSYSTEM=="iio", TEST=="scan_elements/in_accel_x_en", TEST=="scan_elements/in_accel_y_en", TEST=="scan_elements/in_accel_z_en", ENV{IIO_SENSOR_PROXY_TYPE}="iio-buffer-accel"
-SUBSYSTEM=="iio", TEST=="scan_elements/in_rot_from_north_magnetic_tilt_comp_en", ENV{IIO_SENSOR_PROXY_TYPE}="iio-compass"
+SUBSYSTEM=="iio", TEST=="scan_elements/in_rot_from_north_magnetic_tilt_comp_en", ENV{IIO_SENSOR_PROXY_TYPE}="iio-buffer-compass"
 SUBSYSTEM=="iio", TEST=="in_illuminance_input", ENV{IIO_SENSOR_PROXY_TYPE}="iio-poll-als"
 SUBSYSTEM=="iio", TEST=="scan_elements/in_intensity_both_en", ENV{IIO_SENSOR_PROXY_TYPE}="iio-buffer-als"
 SUBSYSTEM=="input", ENV{ID_INPUT_ACCELEROMETER}=="1", ENV{IIO_SENSOR_PROXY_TYPE}="input-accel"
diff --git a/data/iio-sensor-proxy.service.in b/data/iio-sensor-proxy.service.in
index e4b6e78..01e1e79 100644
--- a/data/iio-sensor-proxy.service.in
+++ b/data/iio-sensor-proxy.service.in
@@ -7,3 +7,13 @@ BusName=net.hadess.SensorProxy
 ExecStart=@sbindir@/iio-sensor-proxy
 #Uncomment this to enable debug
 #Environment="G_MESSAGES_DEBUG=all"
+
+# Lockdown
+ProtectSystem=true
+ProtectControlGroups=true
+ProtectHome=true
+ProtectKernelModules=true
+PrivateTmp=true
+RestrictAddressFamilies=AF_UNIX AF_LOCAL AF_NETLINK
+MemoryDenyWriteExecute=true
+RestrictRealtime=true
diff --git a/data/net.hadess.SensorProxy.conf b/data/net.hadess.SensorProxy.conf
index d489aff..51dcd28 100644
--- a/data/net.hadess.SensorProxy.conf
+++ b/data/net.hadess.SensorProxy.conf
@@ -12,22 +12,22 @@
 
   <!-- Only Geoclue can access the compass -->
   <policy user="geoclue">
-    <allow send_interface="net.hadess.SensorProxy.Compass" send_path="/net/hadess/SensorProxy/Compass"/>
-    <allow send_interface="org.freedesktop.DBus.Introspectable" send_path="/net/hadess/SensorProxy/Compass"/>
-    <allow send_interface="org.freedesktop.DBus.Properties" send_path="/net/hadess/SensorProxy/Compass"/>
-    <allow send_interface="org.freedesktop.DBus.Peer" send_path="/net/hadess/SensorProxy/Compass"/>
+    <allow send_destination="net.hadess.SensorProxy" send_interface="net.hadess.SensorProxy.Compass" send_path="/net/hadess/SensorProxy/Compass"/>
+    <allow send_destination="net.hadess.SensorProxy" send_interface="org.freedesktop.DBus.Introspectable" send_path="/net/hadess/SensorProxy/Compass"/>
+    <allow send_destination="net.hadess.SensorProxy" send_interface="org.freedesktop.DBus.Properties" send_path="/net/hadess/SensorProxy/Compass"/>
+    <allow send_destination="net.hadess.SensorProxy" send_interface="org.freedesktop.DBus.Peer" send_path="/net/hadess/SensorProxy/Compass"/>
   </policy>
 
   <!-- Anyone can talk to the main interface -->
   <policy context="default">
-    <allow send_interface="net.hadess.SensorProxy"/>
-    <allow send_interface="org.freedesktop.DBus.Introspectable"/>
-    <allow send_interface="org.freedesktop.DBus.Properties"/>
-    <allow send_interface="org.freedesktop.DBus.Peer"/>
-    <deny send_interface="org.freedesktop.DBus.Introspectable" send_path="/net/hadess/SensorProxy/Compass"/>
-    <deny send_interface="org.freedesktop.DBus.Properties" send_path="/net/hadess/SensorProxy/Compass"/>
-    <deny send_interface="org.freedesktop.DBus.Peer" send_path="/net/hadess/SensorProxy/Compass"/>
-    <!-- <deny send_interface="net.hadess.SensorProxy.Compass"/> -->
+    <allow send_destination="net.hadess.SensorProxy" send_interface="net.hadess.SensorProxy"/>
+    <allow send_destination="net.hadess.SensorProxy" send_interface="org.freedesktop.DBus.Introspectable"/>
+    <allow send_destination="net.hadess.SensorProxy" send_interface="org.freedesktop.DBus.Properties"/>
+    <allow send_destination="net.hadess.SensorProxy" send_interface="org.freedesktop.DBus.Peer"/>
+    <deny send_destination="net.hadess.SensorProxy" send_interface="org.freedesktop.DBus.Introspectable" send_path="/net/hadess/SensorProxy/Compass"/>
+    <deny send_destination="net.hadess.SensorProxy" send_interface="org.freedesktop.DBus.Properties" send_path="/net/hadess/SensorProxy/Compass"/>
+    <deny send_destination="net.hadess.SensorProxy" send_interface="org.freedesktop.DBus.Peer" send_path="/net/hadess/SensorProxy/Compass"/>
+    <!-- <deny send_destination="net.hadess.SensorProxy" send_interface="net.hadess.SensorProxy.Compass"/> -->
   </policy>
 
 </busconfig>
diff --git a/docs/Makefile.in b/docs/Makefile.in
index 174595d..32cd900 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -499,11 +499,11 @@ maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
 	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
- at ENABLE_GTK_DOC_FALSE@maintainer-clean-local:
- at ENABLE_GTK_DOC_FALSE@install-data-local:
 @ENABLE_GTK_DOC_FALSE at clean-local:
- at ENABLE_GTK_DOC_FALSE@uninstall-local:
 @ENABLE_GTK_DOC_FALSE at distclean-local:
+ at ENABLE_GTK_DOC_FALSE@maintainer-clean-local:
+ at ENABLE_GTK_DOC_FALSE@uninstall-local:
+ at ENABLE_GTK_DOC_FALSE@install-data-local:
 clean: clean-am
 
 clean-am: clean-generic clean-local mostlyclean-am
diff --git a/src/drv-fake-compass.c b/src/drv-fake-compass.c
index b3a9c87..900d197 100644
--- a/src/drv-fake-compass.c
+++ b/src/drv-fake-compass.c
@@ -34,8 +34,8 @@ fake_compass_discover (GUdevDevice *device)
 	if (g_strcmp0 (g_udev_device_get_subsystem (device), "input") != 0)
 		return FALSE;
 
-	/* "Lid switch" is a random input device to latch onto */
-	if (g_strcmp0 (g_udev_device_get_property (device, "NAME"), "\"Lid Switch\"") != 0)
+	/* "Power Button" is a random input device to latch onto */
+	if (g_strcmp0 (g_udev_device_get_property (device, "NAME"), "\"Power Button\"") != 0)
 		return FALSE;
 
 	g_debug ("Found fake compass at %s", g_udev_device_get_sysfs_path (device));
diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c
index 667be26..e4765de 100644
--- a/src/iio-sensor-proxy.c
+++ b/src/iio-sensor-proxy.c
@@ -33,10 +33,11 @@
 
 typedef struct {
 	GMainLoop *loop;
+	GUdevClient *client;
 	GDBusNodeInfo *introspection_data;
 	GDBusConnection *connection;
 	guint name_id;
-	gboolean init_done;
+	int ret;
 
 	SensorDriver *drivers[NUM_SENSOR_TYPES];
 	GUdevDevice  *devices[NUM_SENSOR_TYPES];
@@ -85,6 +86,11 @@ driver_type_to_str (DriverType type)
 #define DRIVER_FOR_TYPE(driver_type) data->drivers[driver_type]
 #define DEVICE_FOR_TYPE(driver_type) data->devices[driver_type]
 
+static void sensor_changes (GUdevClient *client,
+			    gchar       *action,
+			    GUdevDevice *device,
+			    SensorData  *data);
+
 static gboolean
 driver_type_exists (SensorData *data,
 		    DriverType  driver_type)
@@ -540,11 +546,40 @@ name_acquired_handler (GDBusConnection *connection,
 		       gpointer         user_data)
 {
 	SensorData *data = user_data;
+	const gchar * const subsystems[] = { "iio", "input", "platform", NULL };
+	guint i;
+
+	data->client = g_udev_client_new (subsystems);
+	if (!find_sensors (data->client, data))
+		goto bail;
+
+	g_signal_connect (G_OBJECT (data->client), "uevent",
+			  G_CALLBACK (sensor_changes), data);
+
+	for (i = 0; i < NUM_SENSOR_TYPES; i++) {
+		data->clients[i] = create_clients_hash_table ();
+
+		if (!driver_type_exists (data, i))
+			continue;
 
-	if (data->init_done) {
-		send_dbus_event (data, PROP_ALL);
-		send_dbus_event (data, PROP_ALL_COMPASS);
+		if (!driver_open (DRIVER_FOR_TYPE(i), DEVICE_FOR_TYPE(i),
+				  driver_type_to_callback_func (data->drivers[i]->type), data)) {
+			DRIVER_FOR_TYPE(i) = NULL;
+			g_clear_object (&DEVICE_FOR_TYPE(i));
+		}
 	}
+
+	if (!any_sensors_left (data))
+		goto bail;
+
+	send_dbus_event (data, PROP_ALL);
+	send_dbus_event (data, PROP_ALL_COMPASS);
+	return;
+
+bail:
+	data->ret = 0;
+	g_debug ("Could not find any supported sensors");
+	g_main_loop_quit (data->loop);
 }
 
 static gboolean
@@ -686,6 +721,7 @@ free_sensor_data (SensorData *data)
 
 	g_clear_pointer (&data->introspection_data, g_dbus_node_info_unref);
 	g_clear_object (&data->connection);
+	g_clear_object (&data->client);
 	g_clear_pointer (&data->loop, g_main_loop_unref);
 	g_free (data);
 }
@@ -698,6 +734,9 @@ sensor_changes (GUdevClient *client,
 {
 	guint i;
 
+	g_debug ("Sensor changes: action = %s, device = %s",
+		 action, g_udev_device_get_sysfs_path (device));
+
 	if (g_strcmp0 (action, "remove") == 0) {
 		for (i = 0; i < NUM_SENSOR_TYPES; i++) {
 			GUdevDevice *dev = DEVICE_FOR_TYPE(i);
@@ -754,10 +793,7 @@ sensor_changes (GUdevClient *client,
 int main (int argc, char **argv)
 {
 	SensorData *data;
-	GUdevClient *client;
 	int ret = 0;
-	const gchar * const subsystems[] = { "iio", "input", "platform", NULL };
-	guint i;
 
 	g_usleep (G_USEC_PER_SEC * 3);
 
@@ -768,40 +804,9 @@ int main (int argc, char **argv)
 	/* Set up D-Bus */
 	setup_dbus (data);
 
-	client = g_udev_client_new (subsystems);
-	if (!find_sensors (client, data)) {
-		g_debug ("Could not find any supported sensors");
-		return 0;
-	}
-	g_signal_connect (G_OBJECT (client), "uevent",
-			  G_CALLBACK (sensor_changes), data);
-
-	for (i = 0; i < NUM_SENSOR_TYPES; i++) {
-		data->clients[i] = create_clients_hash_table ();
-
-		if (!driver_type_exists (data, i))
-			continue;
-
-		if (!driver_open (DRIVER_FOR_TYPE(i), DEVICE_FOR_TYPE(i),
-				  driver_type_to_callback_func (data->drivers[i]->type), data)) {
-			DRIVER_FOR_TYPE(i) = NULL;
-			g_clear_object (&DEVICE_FOR_TYPE(i));
-		}
-	}
-
-	if (!any_sensors_left (data))
-		goto out;
-
-	data->init_done = TRUE;
-	if (data->connection) {
-		send_dbus_event (data, PROP_ALL);
-		send_dbus_event (data, PROP_ALL_COMPASS);
-	}
-
 	data->loop = g_main_loop_new (NULL, TRUE);
 	g_main_loop_run (data->loop);
-
-out:
+	ret = data->ret;
 	free_sensor_data (data);
 
 	return ret;
diff --git a/src/monitor-sensor.c b/src/monitor-sensor.c
index 8d1e997..7eb35cc 100644
--- a/src/monitor-sensor.c
+++ b/src/monitor-sensor.c
@@ -108,12 +108,17 @@ print_initial_values (void)
 	if (g_variant_get_boolean (v)) {
 		g_variant_unref (v);
 		v = g_dbus_proxy_get_cached_property (iio_proxy, "CompassHeading");
-		g_print ("=== Has compass (heading: %lf)\n",
-			   g_variant_get_double (v));
+		if (v) {
+			g_print ("=== Has compass (heading: %lf)\n",
+				 g_variant_get_double (v));
+			g_variant_unref (v);
+		} else {
+			g_print ("=== Has compass (heading: unset)\n");
+		}
 	} else {
 		g_print ("=== No compass\n");
 	}
-	g_variant_unref (v);
+	g_clear_pointer (&v, g_variant_unref);
 }
 
 static void



More information about the Neon-commits mailing list