rust-cryptoki icon indicating copy to clipboard operation
rust-cryptoki copied to clipboard

finalize() without drop()?

Open arjennienhuis opened this issue 2 years ago • 3 comments

The only way I can find to "gracefully" stop another thread that is blocking on C_WaitForSlotEvent is to call C_Finalize.

Pkcs11::finalize() is a no-op and Pkcs11Impl::finalize() is only called on drop(). I cannot drop the library if it is being used in another thread.

Is it ok to let Pkcs11::finalize() call Pkcs11Impl::finalize()?

We also need to fix Pkcs11::is_initialized() but that is a separate issue.

arjennienhuis avatar Jun 10 '23 07:06 arjennienhuis

Hmm... Yeah, it looks problematic. I'm not the author of this code but I assume the intention is to allow multiple threads access through Arc to the Impl struct and finalize when all threads are done.

And your point is that you want to call finalize earlier? The problematic part is, the pkcs11 struct assumes that what it holds is an initialized object before finalization. Would it be possible for your code to get all threads to drop their references? That'd deterministically call finalize when the last reference is dropped.

wiktor-k avatar Jun 10 '23 08:06 wiktor-k