Browse Source

kernel: let rt_thread_idle_excute loop until there is no dead thread

Out side world is difficult to tell whethere there is dead thread
remaining. If rt_thread_idle_excute only do one cleanup, it's hard to
finish cleanups outside the idle thread. So let is loop and do all the
cleanups in one call.
Grissiom 11 years ago
parent
commit
04f432f47b
1 changed files with 5 additions and 2 deletions
  1. 5 2
      src/idle.c

+ 5 - 2
src/idle.c

@@ -22,6 +22,8 @@
  * 2006-03-23     Bernard      the first version
  * 2006-03-23     Bernard      the first version
  * 2010-11-10     Bernard      add cleanup callback function in thread exit.
  * 2010-11-10     Bernard      add cleanup callback function in thread exit.
  * 2012-12-29     Bernard      fix compiling warning.
  * 2012-12-29     Bernard      fix compiling warning.
+ * 2013-12-21     Grissiom     let rt_thread_idle_excute loop until there is no
+ *                             dead thread.
  */
  */
 
 
 #include <rthw.h>
 #include <rthw.h>
@@ -72,8 +74,9 @@ void rt_thread_idle_sethook(void (*hook)(void))
  */
  */
 void rt_thread_idle_excute(void)
 void rt_thread_idle_excute(void)
 {
 {
-    /* check the defunct thread list */
-    if (!rt_list_isempty(&rt_thread_defunct))
+    /* Loop until there is no dead thread. So one call to rt_thread_idle_excute
+     * will do all the cleanups. */
+    while (!rt_list_isempty(&rt_thread_defunct))
     {
     {
         rt_base_t lock;
         rt_base_t lock;
         rt_thread_t thread;
         rt_thread_t thread;