summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrissiom <[email protected]>2013-12-21 11:24:37 +0800
committerGrissiom <[email protected]>2013-12-21 11:27:26 +0800
commit408ac34bc2d762db7019a14cc5caf8af4df57b43 (patch)
treef42003d993d5b3706acadf745772165fbc449c9b
parentca270a46678b8de14fc23b2851ef84d265f29268 (diff)
kernel: add rt_critical_level that return the lock count of scheduler
Out side world may be interested in whether the scheduler is locked or not. Provide an API to tell that.
-rw-r--r--include/rtthread.h1
-rw-r--r--src/scheduler.c10
2 files changed, 11 insertions, 0 deletions
diff --git a/include/rtthread.h b/include/rtthread.h
index b68a301a5c..0891ed9bcc 100644
--- a/include/rtthread.h
+++ b/include/rtthread.h
@@ -173,6 +173,7 @@ void rt_schedule_remove_thread(struct rt_thread *thread);
void rt_enter_critical(void);
void rt_exit_critical(void);
+rt_uint16_t rt_critical_level(void);
#ifdef RT_USING_HOOK
void rt_scheduler_sethook(void (*hook)(rt_thread_t from, rt_thread_t to));
diff --git a/src/scheduler.c b/src/scheduler.c
index cefc5b8c41..a0384e899a 100644
--- a/src/scheduler.c
+++ b/src/scheduler.c
@@ -34,6 +34,7 @@
* issue found by kuronca
* 2010-12-13 Bernard add defunct list initialization even if not use heap.
* 2011-05-10 Bernard clean scheduler debug log.
+ * 2013-12-21 Grissiom add rt_critical_level
*/
#include <rtthread.h>
@@ -398,5 +399,14 @@ void rt_exit_critical(void)
}
}
+/**
+ * Get the scheduler lock level
+ *
+ * @return the level of the scheduler lock. 0 means unlocked.
+ */
+rt_uint16_t rt_critical_level(void)
+{
+ return rt_scheduler_lock_nest;
+}
/*@}*/