aboutsummaryrefslogtreecommitdiffstats
path: root/testing/libfprint/0002-uru4000-fix-cancelling-of-imaging-from-error-callbac.patch
blob: fc5d3f491d37f4f7556d3d12c15b29065fdb65c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
From 045d3c92c22cfc12acd3fe1b2d43bab819758c98 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
Date: Mon, 3 Dec 2012 09:51:27 +0200
Subject: [PATCH 2/3] uru4000: fix cancelling of imaging from error callback

Call error callback before resetting img_transfer to NULL. This
variable is internally used to detect if we are still in imaging
loop and the call to execute_state_change() needs to be postponed.
Since this is the final thing imaging_complete() we can't reset
img_transfer until just before this call.

https://bugs.freedesktop.org/show_bug.cgi?id=57829
---
 libfprint/drivers/uru4000.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/libfprint/drivers/uru4000.c b/libfprint/drivers/uru4000.c
index 07e26a4..ccaa87f 100644
--- a/libfprint/drivers/uru4000.c
+++ b/libfprint/drivers/uru4000.c
@@ -789,15 +789,18 @@ static void imaging_complete(struct fpi_ssm *ssm)
 	int r = ssm->error;
 	fpi_ssm_free(ssm);
 
+	/* Report error before exiting imaging loop - the error handler
+	 * can request state change, which needs to be postponed to end of
+	 * this function. */
+	if (r)
+		fpi_imgdev_session_error(dev, r);
+
 	g_free(urudev->img_data);
 	urudev->img_data = NULL;
 
 	libusb_free_transfer(urudev->img_transfer);
 	urudev->img_transfer = NULL;
 
-	if (r)
-		fpi_imgdev_session_error(dev, r);
-
 	r = execute_state_change(dev);
 	if (r)
 		fpi_imgdev_session_error(dev, r);
-- 
1.8.0.1