in src/clds_hazard_pointers.c [473:493]
void clds_hazard_pointers_unregister_thread(CLDS_HAZARD_POINTERS_THREAD_HANDLE clds_hazard_pointers_thread)
{
if (clds_hazard_pointers_thread == NULL)
{
LogError("Invalid arguments: CLDS_HAZARD_POINTERS_THREAD_HANDLE clds_hazard_pointers_thread=%p", clds_hazard_pointers_thread);
}
else
{
CLDS_HAZARD_POINTERS_HANDLE clds_hazard_pointers = clds_hazard_pointers_thread->clds_hazard_pointers;
// remove the thread from the thread list
(void)interlocked_exchange(&clds_hazard_pointers_thread->active, 0);
WORKER_THREAD_SCHEDULE_PROCESS_RESULT schedule_result = worker_thread_schedule_process(clds_hazard_pointers->hp_thread_cleanup_worker);
if (schedule_result != WORKER_THREAD_SCHEDULE_PROCESS_OK)
{
LogError("worker_thread_schedule_process failed with %" PRI_MU_ENUM "",
MU_ENUM_VALUE(WORKER_THREAD_SCHEDULE_PROCESS_RESULT, schedule_result));
}
}
}