RTEMS: Add user-defined name to thread queues
Add a user-defined name to the self-contained synchronization objects in order to make system diagnostics, tracing and debugging more user friendly. Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
This commit is contained in:
parent
838cfa352c
commit
69dabb3e30
|
@ -46,6 +46,7 @@ struct _Thread_queue_Queue {
|
||||||
struct _Ticket_lock_Control _Lock;
|
struct _Ticket_lock_Control _Lock;
|
||||||
struct _Thread_queue_Heads *_heads;
|
struct _Thread_queue_Heads *_heads;
|
||||||
struct _Thread_Control *_owner;
|
struct _Thread_Control *_owner;
|
||||||
|
const char *_name;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _Mutex_Control {
|
struct _Mutex_Control {
|
||||||
|
@ -72,18 +73,36 @@ struct _Futex_Control {
|
||||||
|
|
||||||
#define _TICKET_LOCK_INITIALIZER { 0, 0 }
|
#define _TICKET_LOCK_INITIALIZER { 0, 0 }
|
||||||
|
|
||||||
#define _THREAD_QUEUE_INITIALIZER { _TICKET_LOCK_INITIALIZER, 0, 0 }
|
#define _THREAD_QUEUE_INITIALIZER { _TICKET_LOCK_INITIALIZER, 0, 0, 0 }
|
||||||
|
|
||||||
|
#define _THREAD_QUEUE_NAMED_INITIALIZER(_name) \
|
||||||
|
{ _TICKET_LOCK_INITIALIZER, 0, 0, _name }
|
||||||
|
|
||||||
#define _MUTEX_INITIALIZER { _THREAD_QUEUE_INITIALIZER }
|
#define _MUTEX_INITIALIZER { _THREAD_QUEUE_INITIALIZER }
|
||||||
|
|
||||||
|
#define _MUTEX_NAMED_INITIALIZER(_name) \
|
||||||
|
{ _THREAD_QUEUE_NAMED_INITIALIZER(_name) }
|
||||||
|
|
||||||
#define _MUTEX_RECURSIVE_INITIALIZER { _MUTEX_INITIALIZER, 0 }
|
#define _MUTEX_RECURSIVE_INITIALIZER { _MUTEX_INITIALIZER, 0 }
|
||||||
|
|
||||||
|
#define _MUTEX_RECURSIVE_NAMED_INITIALIZER(_name) \
|
||||||
|
{ _MUTEX_NAMED_INITIALIZER(_name), 0 }
|
||||||
|
|
||||||
#define _CONDITION_INITIALIZER { _THREAD_QUEUE_INITIALIZER }
|
#define _CONDITION_INITIALIZER { _THREAD_QUEUE_INITIALIZER }
|
||||||
|
|
||||||
|
#define _CONDITION_NAMED_INITIALIZER(_name) \
|
||||||
|
{ _THREAD_QUEUE_NAMED_INITIALIZER(_name) }
|
||||||
|
|
||||||
#define _SEMAPHORE_INITIALIZER(_count) { _THREAD_QUEUE_INITIALIZER, _count }
|
#define _SEMAPHORE_INITIALIZER(_count) { _THREAD_QUEUE_INITIALIZER, _count }
|
||||||
|
|
||||||
|
#define _SEMAPHORE_NAMED_INITIALIZER(_name, _count) \
|
||||||
|
{ _THREAD_QUEUE_NAMED_INITIALIZER(_name), _count }
|
||||||
|
|
||||||
#define _FUTEX_INITIALIZER { _THREAD_QUEUE_INITIALIZER }
|
#define _FUTEX_INITIALIZER { _THREAD_QUEUE_INITIALIZER }
|
||||||
|
|
||||||
|
#define _FUTEX_NAMED_INITIALIZER(_name) \
|
||||||
|
{ _THREAD_QUEUE_NAMED_INITIALIZER(_name) }
|
||||||
|
|
||||||
static __inline void
|
static __inline void
|
||||||
_Mutex_Initialize(struct _Mutex_Control *_mutex)
|
_Mutex_Initialize(struct _Mutex_Control *_mutex)
|
||||||
{
|
{
|
||||||
|
@ -92,6 +111,14 @@ _Mutex_Initialize(struct _Mutex_Control *_mutex)
|
||||||
*_mutex = _init;
|
*_mutex = _init;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static __inline void
|
||||||
|
_Mutex_Initialize_named(struct _Mutex_Control *_mutex, const char *_name)
|
||||||
|
{
|
||||||
|
struct _Mutex_Control _init = _MUTEX_NAMED_INITIALIZER(_name);
|
||||||
|
|
||||||
|
*_mutex = _init;
|
||||||
|
}
|
||||||
|
|
||||||
void _Mutex_Acquire(struct _Mutex_Control *);
|
void _Mutex_Acquire(struct _Mutex_Control *);
|
||||||
|
|
||||||
int _Mutex_Acquire_timed(struct _Mutex_Control *, const struct timespec *);
|
int _Mutex_Acquire_timed(struct _Mutex_Control *, const struct timespec *);
|
||||||
|
@ -115,6 +142,16 @@ _Mutex_recursive_Initialize(struct _Mutex_recursive_Control *_mutex)
|
||||||
*_mutex = _init;
|
*_mutex = _init;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static __inline void
|
||||||
|
_Mutex_recursive_Initialize_named(struct _Mutex_recursive_Control *_mutex,
|
||||||
|
const char *_name)
|
||||||
|
{
|
||||||
|
struct _Mutex_recursive_Control _init =
|
||||||
|
_MUTEX_RECURSIVE_NAMED_INITIALIZER(_name);
|
||||||
|
|
||||||
|
*_mutex = _init;
|
||||||
|
}
|
||||||
|
|
||||||
void _Mutex_recursive_Acquire(struct _Mutex_recursive_Control *);
|
void _Mutex_recursive_Acquire(struct _Mutex_recursive_Control *);
|
||||||
|
|
||||||
int _Mutex_recursive_Acquire_timed(struct _Mutex_recursive_Control *,
|
int _Mutex_recursive_Acquire_timed(struct _Mutex_recursive_Control *,
|
||||||
|
@ -139,6 +176,15 @@ _Condition_Initialize(struct _Condition_Control *_cond)
|
||||||
*_cond = _init;
|
*_cond = _init;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static __inline void
|
||||||
|
_Condition_Initialize_named(struct _Condition_Control *_cond,
|
||||||
|
const char *_name)
|
||||||
|
{
|
||||||
|
struct _Condition_Control _init = _CONDITION_NAMED_INITIALIZER(_name);
|
||||||
|
|
||||||
|
*_cond = _init;
|
||||||
|
}
|
||||||
|
|
||||||
void _Condition_Wait(struct _Condition_Control *, struct _Mutex_Control *);
|
void _Condition_Wait(struct _Condition_Control *, struct _Mutex_Control *);
|
||||||
|
|
||||||
int _Condition_Wait_timed(struct _Condition_Control *,
|
int _Condition_Wait_timed(struct _Condition_Control *,
|
||||||
|
@ -170,6 +216,16 @@ _Semaphore_Initialize(struct _Semaphore_Control *_semaphore,
|
||||||
*_semaphore = _init;
|
*_semaphore = _init;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static __inline void
|
||||||
|
_Semaphore_Initialize_named(struct _Semaphore_Control *_semaphore,
|
||||||
|
const char *_name, unsigned int _count)
|
||||||
|
{
|
||||||
|
struct _Semaphore_Control _init =
|
||||||
|
_SEMAPHORE_NAMED_INITIALIZER(_name, _count);
|
||||||
|
|
||||||
|
*_semaphore = _init;
|
||||||
|
}
|
||||||
|
|
||||||
void _Semaphore_Wait(struct _Semaphore_Control *);
|
void _Semaphore_Wait(struct _Semaphore_Control *);
|
||||||
|
|
||||||
void _Semaphore_Post(struct _Semaphore_Control *);
|
void _Semaphore_Post(struct _Semaphore_Control *);
|
||||||
|
@ -189,6 +245,14 @@ _Futex_Initialize(struct _Futex_Control *_futex)
|
||||||
*_futex = _init;
|
*_futex = _init;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static __inline void
|
||||||
|
_Futex_Initialize_named(struct _Futex_Control *_futex, const char *_name)
|
||||||
|
{
|
||||||
|
struct _Futex_Control _init = _FUTEX_NAMED_INITIALIZER(_name);
|
||||||
|
|
||||||
|
*_futex = _init;
|
||||||
|
}
|
||||||
|
|
||||||
int _Futex_Wait(struct _Futex_Control *, int *, int);
|
int _Futex_Wait(struct _Futex_Control *, int *, int);
|
||||||
|
|
||||||
int _Futex_Wake(struct _Futex_Control *, int);
|
int _Futex_Wake(struct _Futex_Control *, int);
|
||||||
|
|
Loading…
Reference in New Issue