X-Git-Url: https://pd.if.org/git/?p=pdclib.old;a=blobdiff_plain;f=opt%2Fpthreads%2Fcall_once.c;fp=opt%2Fpthreads%2Fcall_once.c;h=123ad3a91b1ba636a40888849ce295d0d2bbfbe2;hp=0000000000000000000000000000000000000000;hb=d293fb98fe80a472ad4d11b4d8a1413d2142064a;hpb=42ca148113de4800d41cbd0491c508160bb1cf36 diff --git a/opt/pthreads/call_once.c b/opt/pthreads/call_once.c new file mode 100644 index 0000000..123ad3a --- /dev/null +++ b/opt/pthreads/call_once.c @@ -0,0 +1,38 @@ +#ifndef REGTEST +#include +#include + +void call_once(once_flag *flag, void (*func)(void)) +{ + pthread_once(flag, func); +} +#endif + +#ifdef TEST +#include <_PDCLIB_test.h> + +#ifndef REGTEST +static int count = 0; +static once_flag once = ONCE_FLAG_INIT; + +static void do_once(void) +{ + count++; +} +#endif + +int main( void ) +{ +#ifndef REGTEST + TESTCASE(count == 0); + call_once(&once, do_once); + TESTCASE(count == 1); + call_once(&once, do_once); + TESTCASE(count == 1); + do_once(); + TESTCASE(count == 2); +#endif + return TEST_RESULTS; +} + +#endif