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 <[EMAIL PROTECTED]>
---
 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.
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';
 }
_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to