* [Xenomai-core] [PATCH 2/2] Provide owner name via rt_mutex_inquire
@ 2008-07-10 13:17 Jan Kiszka
2008-07-10 14:33 ` Gilles Chanteperdrix
2008-07-31 16:28 ` Philippe Gerum
0 siblings, 2 replies; 7+ messages in thread
From: Jan Kiszka @ 2008-07-10 13:17 UTC (permalink / raw)
To: xenomai-core
This can be helpful for debugging the (futile) release attempts of
mutexes by tasks that do not own them.
Returning the RT_TASK reference may appear more consistent on first
sight, but it cannot be guaranteed that the owner is actually a native
task. Therefore this patch uses the symbolic name.
Signed-off-by: Jan Kiszka <jan.kiszka@domain.hid>
---
include/native/mutex.h | 3 +++
ksrc/skins/native/mutex.c | 5 +++++
2 files changed, 8 insertions(+)
Index: b/include/native/mutex.h
===================================================================
--- a/include/native/mutex.h
+++ b/include/native/mutex.h
@@ -38,6 +38,9 @@ typedef struct rt_mutex_info {
char name[XNOBJECT_NAME_LEN]; /**< Symbolic name. */
+ char owner[XNOBJECT_NAME_LEN]; /**< Symbolic name of the current owner,
+ empty if unlocked. */
+
} RT_MUTEX_INFO;
typedef struct rt_mutex_placeholder {
Index: b/ksrc/skins/native/mutex.c
===================================================================
--- a/ksrc/skins/native/mutex.c
+++ b/ksrc/skins/native/mutex.c
@@ -597,6 +597,11 @@ int rt_mutex_inquire(RT_MUTEX *mutex, RT
strcpy(info->name, mutex->name);
info->lockcnt = mutex->lockcnt;
info->nwaiters = xnsynch_nsleepers(&mutex->synch_base);
+ if (mutex->lockcnt)
+ strcpy(info->owner,
+ xnthread_name(xnsynch_owner(&mutex->synch_base)));
+ else
+ info->owner[0] = 0;
unlock_and_exit:
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Xenomai-core] [PATCH 2/2] Provide owner name via rt_mutex_inquire
2008-07-10 13:17 [Xenomai-core] [PATCH 2/2] Provide owner name via rt_mutex_inquire Jan Kiszka
@ 2008-07-10 14:33 ` Gilles Chanteperdrix
2008-07-10 15:02 ` Jan Kiszka
2008-07-11 12:54 ` Gilles Chanteperdrix
2008-07-31 16:28 ` Philippe Gerum
1 sibling, 2 replies; 7+ messages in thread
From: Gilles Chanteperdrix @ 2008-07-10 14:33 UTC (permalink / raw)
To: Jan Kiszka; +Cc: xenomai-core
Jan Kiszka wrote:
> This can be helpful for debugging the (futile) release attempts of
> mutexes by tasks that do not own them.
>
> Returning the RT_TASK reference may appear more consistent on first
> sight, but it cannot be guaranteed that the owner is actually a native
> task. Therefore this patch uses the symbolic name.
>
> Signed-off-by: Jan Kiszka <jan.kiszka@domain.hid>
> ---
> include/native/mutex.h | 3 +++
> ksrc/skins/native/mutex.c | 5 +++++
> 2 files changed, 8 insertions(+)
>
> Index: b/include/native/mutex.h
> ===================================================================
> --- a/include/native/mutex.h
> +++ b/include/native/mutex.h
> @@ -38,6 +38,9 @@ typedef struct rt_mutex_info {
>
> char name[XNOBJECT_NAME_LEN]; /**< Symbolic name. */
>
> + char owner[XNOBJECT_NAME_LEN]; /**< Symbolic name of the current owner,
> + empty if unlocked. */
> +
> } RT_MUTEX_INFO;
>
> typedef struct rt_mutex_placeholder {
> Index: b/ksrc/skins/native/mutex.c
> ===================================================================
> --- a/ksrc/skins/native/mutex.c
> +++ b/ksrc/skins/native/mutex.c
> @@ -597,6 +597,11 @@ int rt_mutex_inquire(RT_MUTEX *mutex, RT
> strcpy(info->name, mutex->name);
> info->lockcnt = mutex->lockcnt;
> info->nwaiters = xnsynch_nsleepers(&mutex->synch_base);
> + if (mutex->lockcnt)
> + strcpy(info->owner,
> + xnthread_name(xnsynch_owner(&mutex->synch_base)));
xnthread_name is not necessarily null terminated, so I would suggest to use:
snprintf(info->owner, sizeof(info->owner), "%s",
xnthread_name(xnsynch_owner(&mutex->synch_base)));
(and not strncpy, strncpy is crippled)
Another possibility would be to use snprintf instead of strncpy in
xnobject_copy_name, and use xnobject_copy_name here.
--
Gilles.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Xenomai-core] [PATCH 2/2] Provide owner name via rt_mutex_inquire
2008-07-10 14:33 ` Gilles Chanteperdrix
@ 2008-07-10 15:02 ` Jan Kiszka
2008-07-10 15:11 ` Gilles Chanteperdrix
2008-07-10 15:14 ` Philippe Gerum
2008-07-11 12:54 ` Gilles Chanteperdrix
1 sibling, 2 replies; 7+ messages in thread
From: Jan Kiszka @ 2008-07-10 15:02 UTC (permalink / raw)
To: Gilles Chanteperdrix; +Cc: xenomai-core
Gilles Chanteperdrix wrote:
> Jan Kiszka wrote:
>> This can be helpful for debugging the (futile) release attempts of
>> mutexes by tasks that do not own them.
>>
>> Returning the RT_TASK reference may appear more consistent on first
>> sight, but it cannot be guaranteed that the owner is actually a native
>> task. Therefore this patch uses the symbolic name.
>>
>> Signed-off-by: Jan Kiszka <jan.kiszka@domain.hid>
>> ---
>> include/native/mutex.h | 3 +++
>> ksrc/skins/native/mutex.c | 5 +++++
>> 2 files changed, 8 insertions(+)
>>
>> Index: b/include/native/mutex.h
>> ===================================================================
>> --- a/include/native/mutex.h
>> +++ b/include/native/mutex.h
>> @@ -38,6 +38,9 @@ typedef struct rt_mutex_info {
>>
>> char name[XNOBJECT_NAME_LEN]; /**< Symbolic name. */
>>
>> + char owner[XNOBJECT_NAME_LEN]; /**< Symbolic name of the current
>> owner,
>> + empty if unlocked. */
>> +
>> } RT_MUTEX_INFO;
>>
>> typedef struct rt_mutex_placeholder {
>> Index: b/ksrc/skins/native/mutex.c
>> ===================================================================
>> --- a/ksrc/skins/native/mutex.c
>> +++ b/ksrc/skins/native/mutex.c
>> @@ -597,6 +597,11 @@ int rt_mutex_inquire(RT_MUTEX *mutex, RT
>> strcpy(info->name, mutex->name);
>> info->lockcnt = mutex->lockcnt;
>> info->nwaiters = xnsynch_nsleepers(&mutex->synch_base);
>> + if (mutex->lockcnt)
>> + strcpy(info->owner,
>> + xnthread_name(xnsynch_owner(&mutex->synch_base)));
>
> xnthread_name is not necessarily null terminated, so I would suggest to
In fact, that is lethal for other users as well (trace points and proc
dumps come to my mind) and should be fixed ASAP.
Jan
--
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Xenomai-core] [PATCH 2/2] Provide owner name via rt_mutex_inquire
2008-07-10 15:02 ` Jan Kiszka
@ 2008-07-10 15:11 ` Gilles Chanteperdrix
2008-07-10 15:14 ` Philippe Gerum
1 sibling, 0 replies; 7+ messages in thread
From: Gilles Chanteperdrix @ 2008-07-10 15:11 UTC (permalink / raw)
To: Jan Kiszka; +Cc: xenomai-core
[-- Attachment #1: Type: text/plain, Size: 1970 bytes --]
Jan Kiszka wrote:
> Gilles Chanteperdrix wrote:
>> Jan Kiszka wrote:
>>> This can be helpful for debugging the (futile) release attempts of
>>> mutexes by tasks that do not own them.
>>>
>>> Returning the RT_TASK reference may appear more consistent on first
>>> sight, but it cannot be guaranteed that the owner is actually a native
>>> task. Therefore this patch uses the symbolic name.
>>>
>>> Signed-off-by: Jan Kiszka <jan.kiszka@domain.hid>
>>> ---
>>> include/native/mutex.h | 3 +++
>>> ksrc/skins/native/mutex.c | 5 +++++
>>> 2 files changed, 8 insertions(+)
>>>
>>> Index: b/include/native/mutex.h
>>> ===================================================================
>>> --- a/include/native/mutex.h
>>> +++ b/include/native/mutex.h
>>> @@ -38,6 +38,9 @@ typedef struct rt_mutex_info {
>>>
>>> char name[XNOBJECT_NAME_LEN]; /**< Symbolic name. */
>>>
>>> + char owner[XNOBJECT_NAME_LEN]; /**< Symbolic name of the current
>>> owner,
>>> + empty if unlocked. */
>>> +
>>> } RT_MUTEX_INFO;
>>>
>>> typedef struct rt_mutex_placeholder {
>>> Index: b/ksrc/skins/native/mutex.c
>>> ===================================================================
>>> --- a/ksrc/skins/native/mutex.c
>>> +++ b/ksrc/skins/native/mutex.c
>>> @@ -597,6 +597,11 @@ int rt_mutex_inquire(RT_MUTEX *mutex, RT
>>> strcpy(info->name, mutex->name);
>>> info->lockcnt = mutex->lockcnt;
>>> info->nwaiters = xnsynch_nsleepers(&mutex->synch_base);
>>> + if (mutex->lockcnt)
>>> + strcpy(info->owner,
>>> + xnthread_name(xnsynch_owner(&mutex->synch_base)));
>> xnthread_name is not necessarily null terminated, so I would suggest to
>
> In fact, that is lethal for other users as well (trace points and proc
> dumps come to my mind) and should be fixed ASAP.
I propose the following patch then. It should solve the issue at the source.
--
Gilles.
[-- Attachment #2: xeno-xnobject_copy_name-use-snprintf.diff --]
[-- Type: text/plain, Size: 472 bytes --]
Index: include/nucleus/types.h
===================================================================
--- include/nucleus/types.h (r������vision 4004)
+++ include/nucleus/types.h (copie de travail)
@@ -97,7 +97,7 @@ typedef atomic_flags_t xnflags_t;
static inline void xnobject_copy_name(char *dst, const char *src)
{
if (src)
- strncpy(dst, src, XNOBJECT_NAME_LEN);
+ snprintf(dst, XNOBJECT_NAME_LEN, "%s", src);
else
*dst = '\0';
}
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Xenomai-core] [PATCH 2/2] Provide owner name via rt_mutex_inquire
2008-07-10 15:02 ` Jan Kiszka
2008-07-10 15:11 ` Gilles Chanteperdrix
@ 2008-07-10 15:14 ` Philippe Gerum
1 sibling, 0 replies; 7+ messages in thread
From: Philippe Gerum @ 2008-07-10 15:14 UTC (permalink / raw)
To: Jan Kiszka; +Cc: xenomai-core
Jan Kiszka wrote:
> Gilles Chanteperdrix wrote:
>> Jan Kiszka wrote:
>>> This can be helpful for debugging the (futile) release attempts of
>>> mutexes by tasks that do not own them.
>>>
>>> Returning the RT_TASK reference may appear more consistent on first
>>> sight, but it cannot be guaranteed that the owner is actually a native
>>> task. Therefore this patch uses the symbolic name.
>>>
>>> Signed-off-by: Jan Kiszka <jan.kiszka@domain.hid>
>>> ---
>>> include/native/mutex.h | 3 +++
>>> ksrc/skins/native/mutex.c | 5 +++++
>>> 2 files changed, 8 insertions(+)
>>>
>>> Index: b/include/native/mutex.h
>>> ===================================================================
>>> --- a/include/native/mutex.h
>>> +++ b/include/native/mutex.h
>>> @@ -38,6 +38,9 @@ typedef struct rt_mutex_info {
>>>
>>> char name[XNOBJECT_NAME_LEN]; /**< Symbolic name. */
>>>
>>> + char owner[XNOBJECT_NAME_LEN]; /**< Symbolic name of the current
>>> owner,
>>> + empty if unlocked. */
>>> +
>>> } RT_MUTEX_INFO;
>>>
>>> typedef struct rt_mutex_placeholder {
>>> Index: b/ksrc/skins/native/mutex.c
>>> ===================================================================
>>> --- a/ksrc/skins/native/mutex.c
>>> +++ b/ksrc/skins/native/mutex.c
>>> @@ -597,6 +597,11 @@ int rt_mutex_inquire(RT_MUTEX *mutex, RT
>>> strcpy(info->name, mutex->name);
>>> info->lockcnt = mutex->lockcnt;
>>> info->nwaiters = xnsynch_nsleepers(&mutex->synch_base);
>>> + if (mutex->lockcnt)
>>> + strcpy(info->owner,
>>> + xnthread_name(xnsynch_owner(&mutex->synch_base)));
>> xnthread_name is not necessarily null terminated, so I would suggest to
>
> In fact, that is lethal for other users as well (trace points and proc
> dumps come to my mind) and should be fixed ASAP.
>
xnthread_name() shall be considered as null terminated, the payload area is
actually XNOBJECT_NAME_LEN - 1. Users who do not assume this are the ones that
need fixing (like xnobject_copy_name).
--
Philippe.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Xenomai-core] [PATCH 2/2] Provide owner name via rt_mutex_inquire
2008-07-10 14:33 ` Gilles Chanteperdrix
2008-07-10 15:02 ` Jan Kiszka
@ 2008-07-11 12:54 ` Gilles Chanteperdrix
1 sibling, 0 replies; 7+ messages in thread
From: Gilles Chanteperdrix @ 2008-07-11 12:54 UTC (permalink / raw)
To: Jan Kiszka; +Cc: xenomai-core
Gilles Chanteperdrix wrote:
> Another possibility would be to use snprintf instead of strncpy in
> xnobject_copy_name, and use xnobject_copy_name here.
Yet another possibility would be to use strlcpy, available in
kernel-space. But it is funny, glibc people does not seem to like
strlcpy for reasons I do not quite understand...
http://sources.redhat.com/ml/libc-alpha/2000-08/msg00053.html
--
Gilles.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Xenomai-core] [PATCH 2/2] Provide owner name via rt_mutex_inquire
2008-07-10 13:17 [Xenomai-core] [PATCH 2/2] Provide owner name via rt_mutex_inquire Jan Kiszka
2008-07-10 14:33 ` Gilles Chanteperdrix
@ 2008-07-31 16:28 ` Philippe Gerum
1 sibling, 0 replies; 7+ messages in thread
From: Philippe Gerum @ 2008-07-31 16:28 UTC (permalink / raw)
To: Jan Kiszka; +Cc: xenomai-core
Jan Kiszka wrote:
> This can be helpful for debugging the (futile) release attempts of
> mutexes by tasks that do not own them.
>
> Returning the RT_TASK reference may appear more consistent on first
> sight, but it cannot be guaranteed that the owner is actually a native
> task. Therefore this patch uses the symbolic name.
>
> Signed-off-by: Jan Kiszka <jan.kiszka@domain.hid>
>
Applied to the trunk/, thanks.
PS: no 2.4.x backport due to the ABI breakage this involves.
---
> include/native/mutex.h | 3 +++
> ksrc/skins/native/mutex.c | 5 +++++
> 2 files changed, 8 insertions(+)
>
> Index: b/include/native/mutex.h
> ===================================================================
> --- a/include/native/mutex.h
> +++ b/include/native/mutex.h
> @@ -38,6 +38,9 @@ typedef struct rt_mutex_info {
>
> char name[XNOBJECT_NAME_LEN]; /**< Symbolic name. */
>
> + char owner[XNOBJECT_NAME_LEN]; /**< Symbolic name of the current owner,
> + empty if unlocked. */
> +
> } RT_MUTEX_INFO;
>
> typedef struct rt_mutex_placeholder {
> Index: b/ksrc/skins/native/mutex.c
> ===================================================================
> --- a/ksrc/skins/native/mutex.c
> +++ b/ksrc/skins/native/mutex.c
> @@ -597,6 +597,11 @@ int rt_mutex_inquire(RT_MUTEX *mutex, RT
> strcpy(info->name, mutex->name);
> info->lockcnt = mutex->lockcnt;
> info->nwaiters = xnsynch_nsleepers(&mutex->synch_base);
> + if (mutex->lockcnt)
> + strcpy(info->owner,
> + xnthread_name(xnsynch_owner(&mutex->synch_base)));
> + else
> + info->owner[0] = 0;
>
> unlock_and_exit:
>
>
> _______________________________________________
> Xenomai-core mailing list
> Xenomai-core@domain.hid
> https://mail.gna.org/listinfo/xenomai-core
>
--
Philippe.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2008-07-31 16:28 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-10 13:17 [Xenomai-core] [PATCH 2/2] Provide owner name via rt_mutex_inquire Jan Kiszka
2008-07-10 14:33 ` Gilles Chanteperdrix
2008-07-10 15:02 ` Jan Kiszka
2008-07-10 15:11 ` Gilles Chanteperdrix
2008-07-10 15:14 ` Philippe Gerum
2008-07-11 12:54 ` Gilles Chanteperdrix
2008-07-31 16:28 ` Philippe Gerum
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.