From 4cdca4da247b101e01d3c6266c4b2b3ba946c6f5 Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Mon, 26 Jul 2021 19:45:02 +0200 Subject: [PATCH] virtual-device: Do not time out when waiting for SCAN command The timeout is designed to continue commands automatically that are common (e.g. opening the device). This doesn't really make sense for scan commands, and removing the timeout enables test setups where user interaction with the device may happen at arbitrary times. One exception is device removal/unplug, in which case the timeout will be added anyway. --- libfprint/drivers/virtual-device.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/libfprint/drivers/virtual-device.c b/libfprint/drivers/virtual-device.c index 1743692..a9efb39 100644 --- a/libfprint/drivers/virtual-device.c +++ b/libfprint/drivers/virtual-device.c @@ -150,6 +150,8 @@ process_cmds (FpDeviceVirtualDevice * self, char **scan_id, GError **error) { + gboolean removed; + if (g_cancellable_is_cancelled (self->cancellable) || (fpi_device_get_current_action (FP_DEVICE (self)) != FPI_DEVICE_ACTION_NONE && g_cancellable_is_cancelled (fpi_device_get_cancellable (FP_DEVICE (self))))) @@ -250,8 +252,11 @@ process_cmds (FpDeviceVirtualDevice * self, if (self->ignore_wait) return TRUE; + g_object_get (self, "removed", &removed, NULL); + g_assert (self->wait_command_id == 0); - self->wait_command_id = g_timeout_add (500, wait_for_command_timeout, self); + if (!scan || removed) + self->wait_command_id = g_timeout_add (500, wait_for_command_timeout, self); return FALSE; } @@ -304,6 +309,7 @@ recv_instruction_cb (GObject *source_object, else if (g_str_has_prefix (cmd, UNPLUG_CMD)) { fpi_device_remove (FP_DEVICE (self)); + maybe_continue_current_action (self); } else if (g_str_has_prefix (cmd, SET_ENROLL_STAGES_PREFIX)) {