From 8a87ba448c62eb14fa51d70ce870dd10b67ba76b Mon Sep 17 00:00:00 2001 From: Timo Teräs Date: Mon, 3 Dec 2012 09:51:27 +0200 Subject: 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(-) (limited to 'libfprint') 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); -- cgit v1.2.3