소스 검색

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 년 전
부모
커밋
04f432f47b
1개의 변경된 파일5개의 추가작업 그리고 2개의 파일을 삭제
  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;