/* Free all CRL resources */ void FreeCRL(WOLFSSL_CRL* crl, int dynamic) { CRL_Entry* tmp = crl->crlList; WOLFSSL_ENTER("FreeCRL"); if (crl->monitors[0].path) XFREE(crl->monitors[0].path, crl->heap, DYNAMIC_TYPE_CRL_MONITOR); if (crl->monitors[1].path) XFREE(crl->monitors[1].path, crl->heap, DYNAMIC_TYPE_CRL_MONITOR); while(tmp) { CRL_Entry* next = tmp->next; FreeCRL_Entry(tmp, crl->heap); XFREE(tmp, crl->heap, DYNAMIC_TYPE_CRL_ENTRY); tmp = next; } #ifdef HAVE_CRL_MONITOR if (crl->tid != 0) { WOLFSSL_MSG("stopping monitor thread"); if (StopMonitor(crl->mfd) == 0) pthread_join(crl->tid, NULL); else { WOLFSSL_MSG("stop monitor failed"); } } pthread_cond_destroy(&crl->cond); #endif FreeMutex(&crl->crlLock); if (dynamic) /* free self */ XFREE(crl, crl->heap, DYNAMIC_TYPE_CRL); }
/* Add Decoded CRL, 0 on success */ static int AddCRL(WOLFSSL_CRL* crl, DecodedCRL* dcrl) { CRL_Entry* crle; WOLFSSL_ENTER("AddCRL"); crle = (CRL_Entry*)XMALLOC(sizeof(CRL_Entry), crl->heap, DYNAMIC_TYPE_CRL_ENTRY); if (crle == NULL) { WOLFSSL_MSG("alloc CRL Entry failed"); return -1; } if (InitCRL_Entry(crle, dcrl) < 0) { WOLFSSL_MSG("Init CRL Entry failed"); XFREE(crle, crl->heap, DYNAMIC_TYPE_CRL_ENTRY); return -1; } if (LockMutex(&crl->crlLock) != 0) { WOLFSSL_MSG("LockMutex failed"); FreeCRL_Entry(crle, crl->heap); XFREE(crle, crl->heap, DYNAMIC_TYPE_CRL_ENTRY); return BAD_MUTEX_E; } crle->next = crl->crlList; crl->crlList = crle; UnLockMutex(&crl->crlLock); return 0; }
/* Free all CRL resources */ void FreeCRL(CYASSL_CRL* crl, int dynamic) { CRL_Entry* tmp = crl->crlList; CYASSL_ENTER("FreeCRL"); if (crl->monitors[0].path) XFREE(crl->monitors[0].path, NULL, DYNAMIC_TYPE_CRL_MONITOR); if (crl->monitors[1].path) XFREE(crl->monitors[1].path, NULL, DYNAMIC_TYPE_CRL_MONITOR); while(tmp) { CRL_Entry* next = tmp->next; FreeCRL_Entry(tmp); XFREE(tmp, NULL, DYNAMIC_TYPE_CRL_ENTRY); tmp = next; } #ifdef HAVE_CRL_MONITOR if (crl->tid != 0) { CYASSL_MSG("stopping monitor thread"); if (StopMonitor(crl->mfd) == 0) pthread_join(crl->tid, NULL); else { CYASSL_MSG("stop monitor failed, cancel instead"); pthread_cancel(crl->tid); } } #endif FreeMutex(&crl->crlLock); if (dynamic) /* free self */ XFREE(crl, NULL, DYNAMIC_TYPE_CRL); }