]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
lib: Add new once_define and once macros to eu-config.h
authorHeather McIntyre <hsm2@rice.edu>
Mon, 9 Oct 2023 21:09:28 +0000 (23:09 +0200)
committerMark Wielaard <mark@klomp.org>
Sat, 14 Oct 2023 14:44:35 +0000 (16:44 +0200)
* lib/eu-config.h New macros.
[USE_LOCKS] (ONCE_CALL): (once_define, once)

Signed-off-by: Heather S. McIntyre <hsm2@rice.edu>
Signed-off-by: Mark Wielaard <mark@klomp.org>
lib/eu-config.h

index 78a5c4fed1ca49894e7ae7f1096e3b1415508908..feb079dbc2f6d999f000423a8ff7ac92f99854da 100644 (file)
 # include <pthread.h>
 # include <assert.h>
 # define rwlock_define(class,name)     class pthread_rwlock_t name
+# define once_define(class,name)  class pthread_once_t name = PTHREAD_ONCE_INIT
 # define RWLOCK_CALL(call)             \
   ({ int _err = pthread_rwlock_ ## call; assert_perror (_err); })
+# define ONCE_CALL(call)  \
+  ({ int _err = pthread_ ## call; assert_perror (_err); })
 # define rwlock_init(lock)             RWLOCK_CALL (init (&lock, NULL))
 # define rwlock_fini(lock)             RWLOCK_CALL (destroy (&lock))
 # define rwlock_rdlock(lock)           RWLOCK_CALL (rdlock (&lock))
 # define rwlock_wrlock(lock)           RWLOCK_CALL (wrlock (&lock))
 # define rwlock_unlock(lock)           RWLOCK_CALL (unlock (&lock))
+# define once(once_control, init_routine)  \
+  ONCE_CALL (once (&once_control, init_routine))
 #else
 /* Eventually we will allow multi-threaded applications to use the
    libraries.  Therefore we will add the necessary locking although
@@ -50,6 +55,8 @@
 # define rwlock_rdlock(lock) ((void) (lock))
 # define rwlock_wrlock(lock) ((void) (lock))
 # define rwlock_unlock(lock) ((void) (lock))
+# define once_define(class,name)
+# define once(once_control, init_routine)      init_routine()
 #endif /* USE_LOCKS */
 
 #include <libintl.h>