mirror of https://gitlab.freedesktop.org/mesa/mesa
31 lines
711 B
C
31 lines
711 B
C
/*
|
|
* Copyright 2022 Yonggang Luo
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
#include "u_call_once.h"
|
|
|
|
struct util_call_once_context_t
|
|
{
|
|
const void *data;
|
|
util_call_once_data_func func;
|
|
};
|
|
|
|
static thread_local struct util_call_once_context_t call_once_context;
|
|
|
|
static void
|
|
util_call_once_data_slow_once(void)
|
|
{
|
|
struct util_call_once_context_t *once_context = &call_once_context;
|
|
once_context->func(once_context->data);
|
|
}
|
|
|
|
void
|
|
util_call_once_data_slow(once_flag *once, util_call_once_data_func func, const void *data)
|
|
{
|
|
struct util_call_once_context_t *once_context = &call_once_context;
|
|
once_context->data = data;
|
|
once_context->func = func;
|
|
call_once(once, util_call_once_data_slow_once);
|
|
}
|