从1431行开始:
list = &module->module_object[RT_Object_Class_Thread].object_list;
while (list->next != list)
{
object = rt_list_entry(list->next, struct rt_object, list);
if (rt_object_is_systemobject(object) == RT_TRUE)
{
/* detach static object */
rt_thread_detach((rt_thread_t)object);
}
else
{
/* delete dynamic object */
rt_thread_delete((rt_thread_t)object);
}
}
由于list在循环里面从来没有更新过值,如果存在子线程的话,就直接死循环了。可以改为:
list = &module->module_object[RT_Object_Class_Thread].object_list;
while (list->next != &module->module_object[RT_Object_Class_Thread].object_list)
{
object = rt_list_entry(list->next, struct rt_object, list);
if (rt_object_is_systemobject(object) == RT_TRUE)
{
/* detach static object */
rt_thread_detach((rt_thread_t)object);
}
else
{
/* delete dynamic object */
rt_thread_delete((rt_thread_t)object);
}
list = list->next;
}
当然,我比较常规的写法倒是:
struct rt_list_node *node;
list = &module->module_object[RT_Object_Class_Thread].object_list;
node = list->next;
while (node != list)
{
object = rt_list_entry(node, struct rt_object, list);
if (rt_object_is_systemobject(object) == RT_TRUE)
{
/* detach static object */
rt_thread_detach((rt_thread_t)object);
}
else
{
/* delete dynamic object */
rt_thread_delete((rt_thread_t)object);
}
node = node->next;
}