in adapters/tlsio_bearssl.c [965:1073]
void tlsio_bearssl_destroy(CONCRETE_IO_HANDLE tls_io)
{
size_t i;
LIST_ITEM_HANDLE first_pending_io;
if (tls_io == NULL)
{
LogError("NULL handle");
}
else
{
TLS_IO_INSTANCE *tls_io_instance = (TLS_IO_INSTANCE *)tls_io;
if (tls_io_instance->socket_io_read_bytes != NULL)
{
free(tls_io_instance->socket_io_read_bytes);
tls_io_instance->socket_io_read_bytes = NULL;
}
xio_destroy(tls_io_instance->socket_io);
first_pending_io = singlylinkedlist_get_head_item(tls_io_instance->pending_toencrypt_list);
while (first_pending_io != NULL)
{
PENDING_TLS_IO *pending_tls_io = (PENDING_TLS_IO *)singlylinkedlist_item_get_value(first_pending_io);
if (pending_tls_io != NULL)
{
free(pending_tls_io->bytes);
free(pending_tls_io);
}
(void)singlylinkedlist_remove(tls_io_instance->pending_toencrypt_list, first_pending_io);
first_pending_io = singlylinkedlist_get_head_item(tls_io_instance->pending_toencrypt_list);
}
singlylinkedlist_destroy(tls_io_instance->pending_toencrypt_list);
tls_io_instance->pending_toencrypt_list = NULL;
first_pending_io = singlylinkedlist_get_head_item(tls_io_instance->pending_todecrypt_list);
while (first_pending_io != NULL)
{
PENDING_TLS_IO *pending_tls_io = (PENDING_TLS_IO *)singlylinkedlist_item_get_value(first_pending_io);
if (pending_tls_io != NULL)
{
free(pending_tls_io->bytes);
free(pending_tls_io);
}
(void)singlylinkedlist_remove(tls_io_instance->pending_todecrypt_list, first_pending_io);
first_pending_io = singlylinkedlist_get_head_item(tls_io_instance->pending_todecrypt_list);
}
singlylinkedlist_destroy(tls_io_instance->pending_todecrypt_list);
tls_io_instance->pending_todecrypt_list = NULL;
if (tls_io_instance->hostname != NULL)
{
free(tls_io_instance->hostname);
tls_io_instance->hostname = NULL;
}
if (tls_io_instance->trusted_certificates != NULL)
{
free(tls_io_instance->trusted_certificates);
tls_io_instance->trusted_certificates = NULL;
if (tls_io_instance->tas != NULL)
{
// Free the memory if it has been previously allocated
for (i = 0; i < tls_io_instance->ta_count; i++)
{
free_ta_contents(&(tls_io_instance->tas[i]));
}
free(tls_io_instance->tas);
tls_io_instance->tas = NULL;
tls_io_instance->ta_count = 0;
}
}
if (tls_io_instance->x509_certificate != NULL)
{
free(tls_io_instance->x509_certificate);
tls_io_instance->x509_certificate = NULL;
if (tls_io_instance->x509_cert != NULL)
{
free_certificates(tls_io_instance->x509_cert, tls_io_instance->x509_cert_len);
free(tls_io_instance->x509_cert);
tls_io_instance->x509_cert = NULL;
}
}
if (tls_io_instance->x509_private_key != NULL)
{
free(tls_io_instance->x509_private_key);
tls_io_instance->x509_private_key = NULL;
if (tls_io_instance->x509_pk != NULL)
{
free_private_key(tls_io_instance->x509_pk);
free(tls_io_instance->x509_pk);
tls_io_instance->x509_pk = NULL;
}
}
free(tls_io);
}
}