• Marco Trevisan's avatar
    device: Cancel the ongoing operation when releasing the device · e7f804e9
    Marco Trevisan authored
    If a device is currently verifying, identifying or enrolling we may want the
    user to stop the operation before we actually release the device.
    
    Otherwise we may end-up in trying to close (failing) the internal device,
    while fprintd is still considering the device active, causing a dead-lock
    (the device can't be released, but neither claimed again or stop the current
    action).
    
    In fact calling Claim() -> EnrollStart() -> Release(), we would fail with
    the error
    
      net.reactivated.Fprint.Error.Internal:
      Release failed with error: The device is still busy with another
      operation, please try again later. (36)"
    
    However, if we try to call VerifyStop, after this error, we'd fail because
    for the fprintd logic, the device is not claimed anymore, but actually
    closed, and we'd need to claim it again, but... That would still cause an
    internal error.
    
    To avoid this, in case Relase() is called cancel the ongoing operation,
    and wait until it's done before completing the release call.
    e7f804e9
device.c 41.6 KB