# HG changeset patch # User Daiki Ueno # Date 1557150127 -7200 # Mon May 06 15:42:07 2019 +0200 # Node ID 438ac983bda9ec7944990d22a37877e9111caa90 # Parent b018f3e84d87cce99a1fd81feeecb31123058687 pk11slot: reference module from slot for finalization diff --git a/lib/pk11wrap/pk11slot.c b/lib/pk11wrap/pk11slot.c --- a/lib/pk11wrap/pk11slot.c +++ b/lib/pk11wrap/pk11slot.c @@ -1439,6 +1439,11 @@ PK11_InitSlot(SECMODModule *mod, CK_SLOT slot->slotID = slotID; slot->isThreadSafe = mod->isThreadSafe; slot->hasRSAInfo = PR_FALSE; + slot->module = mod; /* NOTE: we don't make a reference here because + * modules have references to their slots. This + * works because modules keep implicit references + * from their slots, and won't unload and disappear + * until all their slots have been freed */ if (PK11_GETTAB(slot)->C_GetSlotInfo(slotID, &slotInfo) != CKR_OK) { slot->disabled = PR_TRUE; @@ -1448,11 +1453,6 @@ PK11_InitSlot(SECMODModule *mod, CK_SLOT /* test to make sure claimed mechanism work */ slot->needTest = mod->internal ? PR_FALSE : PR_TRUE; - slot->module = mod; /* NOTE: we don't make a reference here because - * modules have references to their slots. This - * works because modules keep implicit references - * from their slots, and won't unload and disappear - * until all their slots have been freed */ (void)PK11_MakeString(NULL, slot->slot_name, (char *)slotInfo.slotDescription, sizeof(slotInfo.slotDescription)); slot->isHW = (PRBool)((slotInfo.flags & CKF_HW_SLOT) == CKF_HW_SLOT);