Просмотр исходного кода

修正lwp free object时如果当前对象的删除涉及到其他对象的问题

shaojinchun 5 лет назад
Родитель
Сommit
04fa330012
1 измененных файлов с 6 добавлено и 4 удалено
  1. 6 4
      components/lwp/lwp_pid.c

+ 6 - 4
components/lwp/lwp_pid.c

@@ -126,14 +126,12 @@ static void lwp_user_obj_free(struct rt_lwp *lwp)
     struct rt_list_node *list = RT_NULL, *node = RT_NULL;
     struct rt_object *object = RT_NULL;
 
-    list = &(lwp->object_list), node = list->next;
+    list = &(lwp->object_list);
 
     level = rt_hw_interrupt_disable();
-    while (list != node)
+    while ((node = list->next) != list)
     {
         object = rt_list_entry(node, struct rt_object, lwp_obj_list);
-        node = node->next;
-
         /* remove from kernel object list */
         switch (object->type)
         {
@@ -168,12 +166,16 @@ static void lwp_user_obj_free(struct rt_lwp *lwp)
             rt_timer_delete((rt_timer_t)object);
             break;
         case RT_Object_Class_Channel:
+            /* remove from object list */
+            rt_list_remove(&object->list);
             break;
         case RT_Object_Class_Custom:
             rt_custom_object_destroy(object);
             break;
         default:
             LOG_E("input object type(%d) error", object->type);
+            /* remove from object list */
+            rt_list_remove(&object->list);
             break;
         }
     }