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);
}