diff --git a/libfprint/imgdev.c b/libfprint/imgdev.c index 14e41ae7..1ed3f6dd 100644 --- a/libfprint/imgdev.c +++ b/libfprint/imgdev.c @@ -145,7 +145,10 @@ void fpi_imgdev_report_finger_status(struct fp_img_dev *imgdev, case IMG_ACTION_ENROLL: fp_dbg("reporting enroll result"); fpi_drvcb_enroll_stage_completed(imgdev->dev, r, data, img); - if (r > 0 && r != FP_ENROLL_COMPLETE && r != FP_ENROLL_FAIL) { + /* the callback can cancel enrollment, so recheck current + * action and the status to see if retry is needed */ + if (imgdev->action == IMG_ACTION_ENROLL && + r > 0 && r != FP_ENROLL_COMPLETE && r != FP_ENROLL_FAIL) { imgdev->action_result = 0; imgdev->action_state = IMG_ACQUIRE_STATE_AWAIT_FINGER_ON; dev_change_state(imgdev, IMG_ACQUIRE_STATE_AWAIT_FINGER_ON);