1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Copyright 2022 Yonggang Luo 3*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT 4*61046927SAndroid Build Coastguard Worker */ 5*61046927SAndroid Build Coastguard Worker 6*61046927SAndroid Build Coastguard Worker #include "u_call_once.h" 7*61046927SAndroid Build Coastguard Worker 8*61046927SAndroid Build Coastguard Worker struct util_call_once_context_t 9*61046927SAndroid Build Coastguard Worker { 10*61046927SAndroid Build Coastguard Worker const void *data; 11*61046927SAndroid Build Coastguard Worker util_call_once_data_func func; 12*61046927SAndroid Build Coastguard Worker }; 13*61046927SAndroid Build Coastguard Worker 14*61046927SAndroid Build Coastguard Worker static thread_local struct util_call_once_context_t call_once_context; 15*61046927SAndroid Build Coastguard Worker 16*61046927SAndroid Build Coastguard Worker static void util_call_once_data_slow_once(void)17*61046927SAndroid Build Coastguard Workerutil_call_once_data_slow_once(void) 18*61046927SAndroid Build Coastguard Worker { 19*61046927SAndroid Build Coastguard Worker struct util_call_once_context_t *once_context = &call_once_context; 20*61046927SAndroid Build Coastguard Worker once_context->func(once_context->data); 21*61046927SAndroid Build Coastguard Worker } 22*61046927SAndroid Build Coastguard Worker 23*61046927SAndroid Build Coastguard Worker void util_call_once_data_slow(once_flag * once,util_call_once_data_func func,const void * data)24*61046927SAndroid Build Coastguard Workerutil_call_once_data_slow(once_flag *once, util_call_once_data_func func, const void *data) 25*61046927SAndroid Build Coastguard Worker { 26*61046927SAndroid Build Coastguard Worker struct util_call_once_context_t *once_context = &call_once_context; 27*61046927SAndroid Build Coastguard Worker once_context->data = data; 28*61046927SAndroid Build Coastguard Worker once_context->func = func; 29*61046927SAndroid Build Coastguard Worker call_once(once, util_call_once_data_slow_once); 30*61046927SAndroid Build Coastguard Worker } 31