LudovicRousseau / CCID

CCID driver
https://ccid.apdu.fr/
GNU Lesser General Public License v2.1
235 stars 79 forks source link

Fix InterruptStop if called before InterruptRead #116

Closed emaxx-google closed 1 year ago

emaxx-google commented 1 year ago

The goal is to make the polling termination (via TAG_IFD_STOP_POLLING_THREAD) actually work even when it's triggered before the InterruptRead has a chance to create and publish the polling_transfer.

Without this patch, in some cases the termination was blocked for 10 minutes, because the thread that does InterruptStop might still see the null polling_transfer meanwhile the other thread is about to start this transfer. The proposed solution is to remember in a separate (atomic) boolean flag whether the termination started, to avoid this kind of race condition.

emaxx-google commented 1 year ago

Sorry, this change was incorrect. We should allow starting a new polling transfer after the previous one has been stopped. I've published an attempt to fix this problem: #119; alternatively, this PR needs to be reverted.