void clds_hazard_pointers_unregister_thread()

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