Module: xenomai-2.5 Branch: master Commit: 64c5c2804ef02a32dd8cfc4886f98ad941b6c4c0 URL: http://git.xenomai.org/?p=xenomai-2.5.git;a=commit;h=64c5c2804ef02a32dd8cfc4886f98ad941b6c4c0
Author: Gilles Chanteperdrix <gilles.chanteperd...@xenomai.org> Date: Mon Mar 1 21:33:46 2010 +0100 Use pthread_once for initializations which should be called once. --- src/skins/common/sem_heap.c | 14 +++++++++----- src/skins/common/timeconv.c | 11 +++++++++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/skins/common/sem_heap.c b/src/skins/common/sem_heap.c index ad2e9b8..55ad7d1 100644 --- a/src/skins/common/sem_heap.c +++ b/src/skins/common/sem_heap.c @@ -1,7 +1,8 @@ #include <stdio.h> #include <stdlib.h> -#include <pthread.h> + #include <unistd.h> +#include <pthread.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> @@ -75,11 +76,8 @@ static void remap_on_fork(void) } } -void xeno_init_sem_heaps(void) +static void xeno_init_sem_heaps_inner(void) { - if (xeno_sem_heap[0]) - return; - xeno_sem_heap[0] = (unsigned long) map_sem_heap(0); if (xeno_sem_heap[0] == (unsigned long) MAP_FAILED) { perror("Xenomai: mmap(local sem heap)"); @@ -93,3 +91,9 @@ void xeno_init_sem_heaps(void) exit(EXIT_FAILURE); } } + +void xeno_init_sem_heaps(void) +{ + static pthread_once_t init_sem_heaps_once = PTHREAD_ONCE_INIT; + pthread_once(&init_sem_heaps_once, &xeno_init_sem_heaps_inner); +} diff --git a/src/skins/common/timeconv.c b/src/skins/common/timeconv.c index 9b2ba23..87a0ba2 100644 --- a/src/skins/common/timeconv.c +++ b/src/skins/common/timeconv.c @@ -20,19 +20,26 @@ #include <stdio.h> #include <stdlib.h> +#include <pthread.h> + #include <asm/xenomai/syscall.h> #include <asm-generic/xenomai/bits/timeconv.h> xnsysinfo_t sysinfo; +static void xeno_init_timeconv_inner(void) +{ + xnarch_init_timeconv(sysinfo.cpufreq); +} + void xeno_init_timeconv(int muxid) { + static pthread_once_t init_timeconv_once = PTHREAD_ONCE_INIT; int err = XENOMAI_SYSCALL2(__xn_sys_info, muxid, &sysinfo); if (err) { fprintf(stderr, "Xenomai: sys_info failed: %s\n", strerror(-err)); exit(EXIT_FAILURE); } - - xnarch_init_timeconv(sysinfo.cpufreq); + pthread_once(&init_timeconv_once, &xeno_init_timeconv_inner); } _______________________________________________ Xenomai-git mailing list Xenomai-git@gna.org https://mail.gna.org/listinfo/xenomai-git