From 4cdca4da247b101e01d3c6266c4b2b3ba946c6f5 Mon Sep 17 00:00:00 2001
From: Benjamin Berg <bberg@redhat.com>
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))
         {