From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <49E4C122.9080801@domain.hid> Date: Tue, 14 Apr 2009 19:00:18 +0200 From: Jan Kiszka MIME-Version: 1.0 References: <49E4B5CC.1050902@domain.hid> <49E4B84A.9040805@domain.hid> <49E4BA8A.8070207@domain.hid> <49E4BD20.4030008@domain.hid> <49E4BEBD.90904@domain.hid> <49E4BFB7.50702@domain.hid> In-Reply-To: <49E4BFB7.50702@domain.hid> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Subject: Re: [Xenomai-core] [PATCH] posix: Avoid double declarations List-Id: "Xenomai life and development \(bug reports, patches, discussions\)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gilles Chanteperdrix Cc: xenomai-core Gilles Chanteperdrix wrote: > Jan Kiszka wrote: >> Gilles Chanteperdrix wrote: >>> Jan Kiszka wrote: >>>> Gilles Chanteperdrix wrote: >>>>> Jan Kiszka wrote: >>>>>> Please pull from git://git.xenomai.org/xenomai-jki.git for-upstream >>>>>> and run bootstrap. >>>>>> >>>>>> ----------> >>>>>> >>>>>> Recent glibc versions come with support for >>>>>> pthread_mutexattr_get/setprotocol and pthread_condattr_get/setclock. >>>>>> Make sure we don't declare those prototypes in Xenomai's pthread.h a >>>>>> second time as this can cause g++ warnings and even errors. >>>>>> >>>>>> Signed-off-by: Jan Kiszka >>>>>> --- >>>>>> >>>>>> configure.in | 4 ++-- >>>>>> include/posix/pthread.h | 4 ++++ >>>>>> 2 files changed, 6 insertions(+), 2 deletions(-) >>>>>> >>>>>> diff --git a/configure.in b/configure.in >>>>>> index b291ce4..6a8b821 100644 >>>>>> --- a/configure.in >>>>>> +++ b/configure.in >>>>>> @@ -750,8 +750,8 @@ if test x$CONFIG_XENO_POSIX_UITRON_MLOCKALL = xy; then >>>>>> fi >>>>>> >>>>>> save_LIBS="$LIBS" >>>>>> -LIBS="$LIBS -lrt" >>>>>> -AC_CHECK_FUNCS([shm_open shm_unlink mmap64 ftruncate64]) >>>>>> +LIBS="$LIBS -lrt -lpthread" >>>>>> +AC_CHECK_FUNCS([shm_open shm_unlink mmap64 ftruncate64 pthread_mutexattr_setprotocol pthread_condattr_setclock]) >>>>>> LIBS="$save_LIBS" >>>>>> >>>>>> AC_MSG_CHECKING(whether to enable dlopen support for skin libraries) >>>>>> diff --git a/include/posix/pthread.h b/include/posix/pthread.h >>>>>> index 2344158..98db325 100644 >>>>>> --- a/include/posix/pthread.h >>>>>> +++ b/include/posix/pthread.h >>>>>> @@ -418,17 +418,21 @@ int pthread_intr_control_np(pthread_intr_t intr, >>>>>> extern "C" { >>>>>> #endif >>>>>> >>>>>> +#ifndef HAVE_PTHREAD_MUTEXATTR_SETPROTOCOL >>>>>> int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *attr, >>>>>> int *proto); >>>>>> >>>>>> int pthread_mutexattr_setprotocol(pthread_mutexattr_t *attr, >>>>>> int proto); >>>>>> +#endif >>>>> That is not enough, if these functions are defined, then the >>>>> PTHREAD_PRIO_NONE, PTHREAD_PRIO_INHERIT, PTHREAD_PRIO_PROTECT are going >>>>> to be defined. >>>>> >>>>> Are you sure that the missing "restrict" are not causing the errors ? >>>> This is enough to fix our build breakage due to different prototypes of >>>> those functions, at least under C++. The magic __THROW may make the >>>> difference, but I didn't test that in details as I think its simply >>>> fragile to redeclare them. >>>> >>>> Don't know if those constants can cause trouble, they didn't do so here >>>> so far. But I can Include them if preferred. >>> If it works, it is just as fragile as trying to match function >>> declarations of Xenomai's pthread.h and glibc's pthread.h. >> Nope, because you don't repeat function attributes for their >> definitions. So Xenomai's pthread lib should pick up what the host >> header declares. > > Currently, PTHREAD_PRIO_NONE, PTHREAD_PRIO_INHERIT and > PTHREAD_PRIO_PROTECT are defined in Xenomai's header unconditionnaly. > You see no warning or error because they are defined in an enum in > glibc. But this is a fragile situation. > I could offer this version and later add a patch to provide the missing __real prototypes for all POSIX wrappers. Jan --------> Recent glibc versions come with support for pthread_mutexattr_get/setprotocol and pthread_condattr_get/setclock. Make sure we don't declare those prototypes in Xenomai's pthread.h a second time as this can cause g++ warnings and even errors. Also exclude mutexattr related constants at this chance. Signed-off-by: Jan Kiszka --- configure.in | 4 ++-- include/posix/pthread.h | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/configure.in b/configure.in index b291ce4..6a8b821 100644 --- a/configure.in +++ b/configure.in @@ -750,8 +750,8 @@ if test x$CONFIG_XENO_POSIX_UITRON_MLOCKALL = xy; then fi save_LIBS="$LIBS" -LIBS="$LIBS -lrt" -AC_CHECK_FUNCS([shm_open shm_unlink mmap64 ftruncate64]) +LIBS="$LIBS -lrt -lpthread" +AC_CHECK_FUNCS([shm_open shm_unlink mmap64 ftruncate64 pthread_mutexattr_setprotocol pthread_condattr_setclock]) LIBS="$save_LIBS" AC_MSG_CHECKING(whether to enable dlopen support for skin libraries) diff --git a/include/posix/pthread.h b/include/posix/pthread.h index 2344158..10176ad 100644 --- a/include/posix/pthread.h +++ b/include/posix/pthread.h @@ -140,9 +140,12 @@ struct timespec; #endif /* __KERNEL__ || __XENO_SIM__ */ +#if defined(__KERNEL__) || defined(__XENO_SIM__) || \ + !define(HAVE_PTHREAD_MUTEXATTR_SETPROTOCOL) #define PTHREAD_PRIO_NONE 0 #define PTHREAD_PRIO_INHERIT 1 #define PTHREAD_PRIO_PROTECT 2 +#endif /* __KERNEL__ || __XENO_SIM__ || !HAVE_PTHREAD_MUTEXATTR_SETPROTOCOL */ #define PTHREAD_WARNSW XNTRAPSW #define PTHREAD_LOCK_SCHED XNLOCK @@ -418,17 +421,21 @@ int pthread_intr_control_np(pthread_intr_t intr, extern "C" { #endif +#ifndef HAVE_PTHREAD_MUTEXATTR_SETPROTOCOL int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *attr, int *proto); int pthread_mutexattr_setprotocol(pthread_mutexattr_t *attr, int proto); +#endif +#ifndef HAVE_PTHREAD_CONDATTR_SETCLOCK int pthread_condattr_getclock(const pthread_condattr_t *attr, clockid_t *clk_id); int pthread_condattr_setclock(pthread_condattr_t *attr, clockid_t clk_id); +#endif int pthread_make_periodic_np(pthread_t thread, struct timespec *starttp,