Răsfoiți Sursa

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 ani în urmă
părinte
comite
04f432f47b
1 a modificat fișierele cu 5 adăugiri și 2 ștergeri
  1. 5 2
      src/idle.c

+ 5 - 2
src/idle.c

@@ -22,6 +22,8 @@
  * 2006-03-23     Bernard      the first version
  * 2010-11-10     Bernard      add cleanup callback function in thread exit.
  * 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>
@@ -72,8 +74,9 @@ void rt_thread_idle_sethook(void (*hook)(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_thread_t thread;