]> git.draconx.ca Git - cdecl99.git/blobdiff - src/thread-stdc.h
libcdecl: Punt gnulib lock module.
[cdecl99.git] / src / thread-stdc.h
index 46fe361b0bd74d3f63abbcf0046d9c236ef5a789..a29ec8c4d94c0fc81686a6b65b89073e9fbf1652 100644 (file)
 static tss_t tls_key;
 static bool tls_key_valid;
 
-static void tls_key_init(void)
-{
-       tls_key_valid = (tss_create(&tls_key, free) == thrd_success);
-}
+static void init_once_cb(void);
 
 static void *tls_get(void)
 {
@@ -36,3 +33,17 @@ static int tls_set(void *p)
 {
        return tss_set(tls_key, p) == thrd_success;
 }
+
+static void init_once_with_tls(void)
+{
+       tls_key_valid = (tss_create(&tls_key, free) == thrd_success);
+       init_once_cb();
+}
+
+static int init_once(void)
+{
+       static once_flag flag;
+
+       call_once(&flag, init_once_with_tls);
+       return 1;
+}