diff --git a/src/p11_load.c b/src/p11_load.c index ad0be47..899bb8b 100644 --- a/src/p11_load.c +++ b/src/p11_load.c @@ -86,6 +86,12 @@ int pkcs11_CTX_load(PKCS11_CTX *ctx, const char *name) args.flags |= CKF_OS_LOCKING_OK; args.pReserved = cpriv->init_args; rv = cpriv->method->C_Initialize(&args); + if (rv == CKR_CRYPTOKI_ALREADY_INITIALIZED) { + cpriv->method->C_Finalize(NULL); + rv = cpriv->method->C_Initialize(&args); + } + + if (rv && rv != CKR_CRYPTOKI_ALREADY_INITIALIZED) { C_UnloadModule(cpriv->handle); cpriv->handle = NULL;