image: Fix reporting of retry on activation timeout

The image driver may still be deactivating when a new activation request
comes in. This is because of a hack to do early reporting, which is
technically not needed anymore.

Fix the immediate issue by properly reporting the retry case. The proper
fix is to only finish the previous operation after the device has been
deactivated.
This commit is contained in:
Benjamin Berg 2020-05-22 17:03:23 +02:00 committed by Benjamin Berg
parent ec4fc9aec5
commit 32bdd8d5c4

View file

@ -62,17 +62,34 @@ static gboolean
pending_activation_timeout (gpointer user_data) pending_activation_timeout (gpointer user_data)
{ {
FpImageDevice *self = FP_IMAGE_DEVICE (user_data); FpImageDevice *self = FP_IMAGE_DEVICE (user_data);
FpDevice *device = FP_DEVICE (self);
FpImageDevicePrivate *priv = fp_image_device_get_instance_private (self); FpImageDevicePrivate *priv = fp_image_device_get_instance_private (self);
FpiDeviceAction action = fpi_device_get_current_action (device);
GError *error;
priv->pending_activation_timeout_id = 0; priv->pending_activation_timeout_id = 0;
if (priv->pending_activation_timeout_waiting_finger_off) if (priv->pending_activation_timeout_waiting_finger_off)
fpi_device_action_error (FP_DEVICE (self), error = fpi_device_retry_new_msg (FP_DEVICE_RETRY_REMOVE_FINGER,
fpi_device_retry_new_msg (FP_DEVICE_RETRY_REMOVE_FINGER, "Remove finger before requesting another scan operation");
"Remove finger before requesting another scan operation"));
else else
fpi_device_action_error (FP_DEVICE (self), error = fpi_device_retry_new (FP_DEVICE_RETRY_GENERAL);
fpi_device_retry_new (FP_DEVICE_RETRY_GENERAL));
if (action == FPI_DEVICE_ACTION_VERIFY)
{
fpi_device_verify_report (device, FPI_MATCH_ERROR, NULL, error);
fpi_device_verify_complete (device, NULL);
}
else if (action == FPI_DEVICE_ACTION_IDENTIFY)
{
fpi_device_identify_report (device, NULL, NULL, error);
fpi_device_identify_complete (device, NULL);
}
else
{
/* Can this happen for enroll? */
fpi_device_action_error (device, error);
}
return G_SOURCE_REMOVE; return G_SOURCE_REMOVE;
} }