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)));
+       else
+               info->owner[0] = 0;
 
       unlock_and_exit:
 

_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to