All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-core] [PATCH] posix: Avoid double declarations
@ 2009-04-14 16:11 Jan Kiszka
  2009-04-14 16:22 ` Gilles Chanteperdrix
  2009-04-14 16:24 ` Gilles Chanteperdrix
  0 siblings, 2 replies; 10+ messages in thread
From: Jan Kiszka @ 2009-04-14 16:11 UTC (permalink / raw)
  To: Philippe Gerum; +Cc: xenomai-core

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 <jan.kiszka@domain.hid>
---

 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
 
+#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,


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [Xenomai-core] [PATCH] posix: Avoid double declarations
  2009-04-14 16:11 [Xenomai-core] [PATCH] posix: Avoid double declarations Jan Kiszka
@ 2009-04-14 16:22 ` Gilles Chanteperdrix
  2009-04-14 16:32   ` Jan Kiszka
  2009-04-14 16:24 ` Gilles Chanteperdrix
  1 sibling, 1 reply; 10+ messages in thread
From: Gilles Chanteperdrix @ 2009-04-14 16:22 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: xenomai-core

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 <jan.kiszka@domain.hid>
> ---
> 
>  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 ?

-- 
                                                 Gilles.


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Xenomai-core] [PATCH] posix: Avoid double declarations
  2009-04-14 16:11 [Xenomai-core] [PATCH] posix: Avoid double declarations Jan Kiszka
  2009-04-14 16:22 ` Gilles Chanteperdrix
@ 2009-04-14 16:24 ` Gilles Chanteperdrix
  2009-04-14 16:29   ` Jan Kiszka
  1 sibling, 1 reply; 10+ messages in thread
From: Gilles Chanteperdrix @ 2009-04-14 16:24 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: xenomai-core

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.

You need to declare the __real variants too, as well as the wrappers.

-- 
                                                 Gilles.


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Xenomai-core] [PATCH] posix: Avoid double declarations
  2009-04-14 16:24 ` Gilles Chanteperdrix
@ 2009-04-14 16:29   ` Jan Kiszka
  0 siblings, 0 replies; 10+ messages in thread
From: Jan Kiszka @ 2009-04-14 16:29 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: xenomai-core

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.
> 
> You need to declare the __real variants too, as well as the wrappers.

As they don't existed for all the other attr helpers, I skipped this.
Guess more work is required here.

Jan

-- 
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Xenomai-core] [PATCH] posix: Avoid double declarations
  2009-04-14 16:22 ` Gilles Chanteperdrix
@ 2009-04-14 16:32   ` Jan Kiszka
  2009-04-14 16:43     ` Gilles Chanteperdrix
  0 siblings, 1 reply; 10+ messages in thread
From: Jan Kiszka @ 2009-04-14 16:32 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: xenomai-core

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 <jan.kiszka@domain.hid>
>> ---
>>
>>  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.

Jan

-- 
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Xenomai-core] [PATCH] posix: Avoid double declarations
  2009-04-14 16:32   ` Jan Kiszka
@ 2009-04-14 16:43     ` Gilles Chanteperdrix
  2009-04-14 16:50       ` Jan Kiszka
  0 siblings, 1 reply; 10+ messages in thread
From: Gilles Chanteperdrix @ 2009-04-14 16:43 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: xenomai-core

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 <jan.kiszka@domain.hid>
>>> ---
>>>
>>>  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.

-- 
                                                 Gilles.


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Xenomai-core] [PATCH] posix: Avoid double declarations
  2009-04-14 16:43     ` Gilles Chanteperdrix
@ 2009-04-14 16:50       ` Jan Kiszka
  2009-04-14 16:54         ` Gilles Chanteperdrix
  0 siblings, 1 reply; 10+ messages in thread
From: Jan Kiszka @ 2009-04-14 16:50 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: xenomai-core

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 <jan.kiszka@domain.hid>
>>>> ---
>>>>
>>>>  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.

Jan

-- 
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Xenomai-core] [PATCH] posix: Avoid double declarations
  2009-04-14 16:50       ` Jan Kiszka
@ 2009-04-14 16:54         ` Gilles Chanteperdrix
  2009-04-14 17:00           ` Jan Kiszka
  0 siblings, 1 reply; 10+ messages in thread
From: Gilles Chanteperdrix @ 2009-04-14 16:54 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: xenomai-core

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 <jan.kiszka@domain.hid>
>>>>> ---
>>>>>
>>>>>  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.

-- 
                                                 Gilles.


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Xenomai-core] [PATCH] posix: Avoid double declarations
  2009-04-14 16:54         ` Gilles Chanteperdrix
@ 2009-04-14 17:00           ` Jan Kiszka
  2009-04-14 17:23             ` Gilles Chanteperdrix
  0 siblings, 1 reply; 10+ messages in thread
From: Jan Kiszka @ 2009-04-14 17:00 UTC (permalink / raw)
  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 <jan.kiszka@domain.hid>
>>>>>> ---
>>>>>>
>>>>>>  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 <jan.kiszka@domain.hid>
---

 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,


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [Xenomai-core] [PATCH] posix: Avoid double declarations
  2009-04-14 17:00           ` Jan Kiszka
@ 2009-04-14 17:23             ` Gilles Chanteperdrix
  0 siblings, 0 replies; 10+ messages in thread
From: Gilles Chanteperdrix @ 2009-04-14 17:23 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: xenomai-core

Jan Kiszka wrote:
> 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 <jan.kiszka@domain.hid>
>>>>>>> ---
>>>>>>>
>>>>>>>  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.

That's OK for me.

-- 
                                                 Gilles.


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2009-04-14 17:23 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-04-14 16:11 [Xenomai-core] [PATCH] posix: Avoid double declarations Jan Kiszka
2009-04-14 16:22 ` Gilles Chanteperdrix
2009-04-14 16:32   ` Jan Kiszka
2009-04-14 16:43     ` Gilles Chanteperdrix
2009-04-14 16:50       ` Jan Kiszka
2009-04-14 16:54         ` Gilles Chanteperdrix
2009-04-14 17:00           ` Jan Kiszka
2009-04-14 17:23             ` Gilles Chanteperdrix
2009-04-14 16:24 ` Gilles Chanteperdrix
2009-04-14 16:29   ` Jan Kiszka

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.