46a7538322
The smart card channel tried to mimic mstsc's behavior on if an IRP was processed synchronously or asynchronously. As the channel uses one thread per context it could happen, especially with PCSC, that the main channel thread was blocked waiting for an smart card operation to complete. To prevent that behavior only call known safe functions in the main thread (like CreateContext) and call the rest asynchronously. For example the channel would block if a ListReaders is invoked on the same context where a GetStatusChange (infinite timeout) was already pending. Only when a status change happened the channel would continue. Note: Due to the one context per thread design it's important that cancel isn't queued an alway run synchronously. Otherwise a specific context might lock. |
||
---|---|---|
.. | ||
client | ||
ChannelOptions.cmake | ||
CMakeLists.txt |