static void free_thread_data()

in src/clds_hazard_pointers.c [122:141]


static void free_thread_data(CLDS_HAZARD_POINTERS_THREAD_HANDLE clds_hazard_pointers_thread)
{
    CLDS_HAZARD_POINTER_RECORD_HANDLE hazard_ptr = interlocked_compare_exchange_pointer((void* volatile_atomic*) & clds_hazard_pointers_thread->pointers, NULL, NULL);
    while (hazard_ptr != NULL)
    {
        CLDS_HAZARD_POINTER_RECORD_HANDLE next_hazard_ptr = interlocked_compare_exchange_pointer((void* volatile_atomic*) & hazard_ptr->next, NULL, NULL);
        free(hazard_ptr);
        hazard_ptr = next_hazard_ptr;
    }

    hazard_ptr = interlocked_compare_exchange_pointer((void* volatile_atomic*) & clds_hazard_pointers_thread->free_pointers, NULL, NULL);
    while (hazard_ptr != NULL)
    {
        CLDS_HAZARD_POINTER_RECORD_HANDLE next_hazard_ptr = interlocked_compare_exchange_pointer((void* volatile_atomic*) & hazard_ptr->next, NULL, NULL);
        free(hazard_ptr);
        hazard_ptr = next_hazard_ptr;
    }

    free(clds_hazard_pointers_thread);
}