STATUS destroyCredential()

in main/AppCredential.c [204:242]


STATUS destroyCredential(PAppCredential pAppCredential)
{
    STATUS retStatus = STATUS_SUCCESS;
    StackQueueIterator iterator;
    UINT64 data;
    CHK(pAppCredential != NULL, STATUS_APP_CREDENTIAL_NULL_ARG);

    if (pAppCredential->generatedCertificates != NULL) {
        stackQueueGetIterator(pAppCredential->generatedCertificates, &iterator);
        while (IS_VALID_ITERATOR(iterator)) {
            stackQueueIteratorGetItem(iterator, &data);
            stackQueueIteratorNext(&iterator);
            freeRtcCertificate((PRtcCertificate) data);
        }

        CHK_LOG_ERR((stackQueueClear(pAppCredential->generatedCertificates, FALSE)));
        CHK_LOG_ERR((stackQueueFree(pAppCredential->generatedCertificates)));
        pAppCredential->generatedCertificates = NULL;
    }

    if (pAppCredential->credentialType == APP_CREDENTIAL_TYPE_STATIC) {
        CHK(freeStaticCredentialProvider(&pAppCredential->pCredentialProvider) == STATUS_SUCCESS, STATUS_APP_CREDENTIAL_DESTROY_STATIC);
    } else if (pAppCredential->credentialType == APP_CREDENTIAL_TYPE_IOT_CERT) {
        CHK(freeIotCredentialProvider(&pAppCredential->pCredentialProvider) == STATUS_SUCCESS, STATUS_APP_CREDENTIAL_DESTROY_IOT);
    } else {
        retStatus = STATUS_APP_CREDENTIAL_DESTROY_NA;
    }

    if (IS_VALID_MUTEX_VALUE(pAppCredential->generateCertLock)) {
        MUTEX_FREE(pAppCredential->generateCertLock);
        pAppCredential->generateCertLock = INVALID_MUTEX_VALUE;
    }

CleanUp:
    if (pAppCredential != NULL) {
        pAppCredential->credentialType = APP_CREDENTIAL_TYPE_NA;
    }
    return retStatus;
}