summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2022-10-15 16:19:13 +0800
committerBernard Xiong <[email protected]>2022-10-15 16:19:13 +0800
commit34c77da153319da3225bd2064333b34942fee933 (patch)
tree2866795c124980a36e3258e2f0d3bb6888a1b5a9 /include
parent8524e273e10a87724b4f86dfe8ae94e7cef6ca70 (diff)
[Kernel] Add nested mutex feature
Diffstat (limited to 'include')
-rw-r--r--include/rtdef.h12
-rw-r--r--include/rtthread.h1
2 files changed, 10 insertions, 3 deletions
diff --git a/include/rtdef.h b/include/rtdef.h
index 89ac9edf6e..12232c2d5c 100644
--- a/include/rtdef.h
+++ b/include/rtdef.h
@@ -665,12 +665,19 @@ struct rt_thread
/* priority */
rt_uint8_t current_priority; /**< current priority */
+ rt_uint8_t init_priority; /**< initialized priority */
#if RT_THREAD_PRIORITY_MAX > 32
rt_uint8_t number;
rt_uint8_t high_mask;
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
rt_uint32_t number_mask;
+#ifdef RT_USING_MUTEX
+ /* object for IPC */
+ rt_list_t taken_object_list;
+ rt_object_t pending_object;
+#endif
+
#ifdef RT_USING_EVENT
/* thread event */
rt_uint32_t event_set;
@@ -764,12 +771,11 @@ struct rt_mutex
{
struct rt_ipc_object parent; /**< inherit from ipc_object */
- rt_uint16_t value; /**< value of mutex */
-
- rt_uint8_t original_priority; /**< priority of last thread hold the mutex */
+ rt_uint8_t priority; /**< the maximal priority for pending thread */
rt_uint8_t hold; /**< numbers of thread hold the mutex */
struct rt_thread *owner; /**< current owner of mutex */
+ rt_list_t taken_list; /**< the object list taken by thread */
};
typedef struct rt_mutex *rt_mutex_t;
#endif /* RT_USING_MUTEX */
diff --git a/include/rtthread.h b/include/rtthread.h
index c55720b7d1..893b24ea1b 100644
--- a/include/rtthread.h
+++ b/include/rtthread.h
@@ -368,6 +368,7 @@ rt_err_t rt_mutex_detach(rt_mutex_t mutex);
rt_mutex_t rt_mutex_create(const char *name, rt_uint8_t flag);
rt_err_t rt_mutex_delete(rt_mutex_t mutex);
#endif
+void rt_mutex_drop_thread(rt_mutex_t mutex, rt_thread_t thread);
rt_err_t rt_mutex_take(rt_mutex_t mutex, rt_int32_t timeout);
rt_err_t rt_mutex_trytake(rt_mutex_t mutex);