[gnome-control-center] fingerprint-dialog: Properly handle claiming errors if we're already claiming
- From: Benjamin Berg <bberg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] fingerprint-dialog: Properly handle claiming errors if we're already claiming
- Date: Fri, 11 Dec 2020 17:51:24 +0000 (UTC)
commit ae23cea4d17edaa4b2e8d842ee3713799c3e0812
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date: Fri Dec 11 01:39:38 2020 +0100
fingerprint-dialog: Properly handle claiming errors if we're already claiming
We were a bit too permissive in handling the AlreadyInUse error during
claim, as we assumed it was always us causing it instead of properly
handing the case a device was already claimed by another caller.
So to ensure this is the case we need to avoid multiple calls to claim
until we've finished one.
Unfortunately we can't rely on a cancellable here as we may end up
cancelling the request that succeeded and we'll only get an
AlreadyClaimed error without know if it was us succeeding.
Fixes: #1201
panels/user-accounts/cc-fingerprint-dialog.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
---
diff --git a/panels/user-accounts/cc-fingerprint-dialog.c b/panels/user-accounts/cc-fingerprint-dialog.c
index 98784cf1d..68ad564a1 100644
--- a/panels/user-accounts/cc-fingerprint-dialog.c
+++ b/panels/user-accounts/cc-fingerprint-dialog.c
@@ -69,6 +69,7 @@ struct _CcFingerprintDialog
CcFingerprintManager *manager;
CcFprintdDevice *device;
+ gboolean claiming;
gboolean device_claimed;
gulong device_signal_id;
gulong device_name_owner_id;
@@ -1120,13 +1121,16 @@ claim_device_cb (GObject *object,
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
return;
+ self->claiming = FALSE;
+
if (error)
{
g_autofree char *dbus_error = g_dbus_error_get_remote_error (error);
g_autofree char *error_message = NULL;
- if (dbus_error && g_str_has_suffix (dbus_error, ".Error.AlreadyInUse"))
- self->device_claimed = TRUE;
+ if (dbus_error && g_str_has_suffix (dbus_error, ".Error.AlreadyInUse") &&
+ self->device_claimed)
+ return;
g_dbus_error_strip_remote_error (error);
error_message = g_strdup_printf (_("Failed to claim fingerprint device %s: %s"),
@@ -1152,8 +1156,14 @@ claim_device (CcFingerprintDialog *self)
{
ActUser *user;
+ g_return_if_fail (!self->device_claimed);
+
+ if (self->claiming)
+ return;
+
user = cc_fingerprint_manager_get_user (self->manager);
gtk_widget_set_sensitive (self->prints_manager, FALSE);
+ self->claiming = TRUE;
cc_fprintd_device_call_claim (self->device,
act_user_get_user_name (user),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]