From 4e9f8c71f946213dbd70c3d28f76343e802f1500 Mon Sep 17 00:00:00 2001 From: zhushengle Date: Sat, 2 Apr 2022 14:55:20 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E7=8A=B6=E6=80=81=EF=BC=8CEXIT=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E4=BB=85=E8=A1=A8=E7=A4=BA=E4=BB=BB=E5=8A=A1=E5=B7=B2=E9=80=80?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhushengle Change-Id: I53e98540af4deb44e64f6879df340b27efb201b8 --- kernel/include/los_task.h | 5 +++++ kernel/src/los_sched.c | 1 + kernel/src/los_task.c | 11 +++++------ 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/kernel/include/los_task.h b/kernel/include/los_task.h index ec05e216..786f4a31 100644 --- a/kernel/include/los_task.h +++ b/kernel/include/los_task.h @@ -1503,6 +1503,11 @@ typedef struct { LOSCFG_TASK_STRUCT_EXTENSION /**< Task extension field */ } LosTaskCB; +STATIC INLINE BOOL OsTaskIsExit(const LosTaskCB *taskCB) +{ + return ((taskCB->taskStatus & OS_TASK_STATUS_EXIT) != 0); +} + typedef struct { LosTaskCB *runTask; LosTaskCB *newTask; diff --git a/kernel/src/los_sched.c b/kernel/src/los_sched.c index b60b3f4f..aaa33357 100644 --- a/kernel/src/los_sched.c +++ b/kernel/src/los_sched.c @@ -268,6 +268,7 @@ VOID OsSchedTaskExit(LosTaskCB *taskCB) OsDeleteSortLink(&taskCB->sortList); taskCB->taskStatus &= ~(OS_TASK_STATUS_DELAY | OS_TASK_STATUS_PEND_TIME); } + taskCB->taskStatus |= OS_TASK_STATUS_EXIT; } VOID OsSchedYield(VOID) diff --git a/kernel/src/los_task.c b/kernel/src/los_task.c index 16ccff5d..5ec570a1 100644 --- a/kernel/src/los_task.c +++ b/kernel/src/los_task.c @@ -146,7 +146,7 @@ STATIC VOID OsRecycleTaskResources(LosTaskCB *taskCB, UINTPTR *stackPtr) taskCB->topOfStack = (UINT32)NULL; taskCB->taskStatus &= ~OS_TASK_FLAG_STACK_FREE; } - if (!(taskCB->taskStatus & OS_TASK_STATUS_EXIT)) { + if (!(taskCB->taskStatus & OS_TASK_FLAG_JOINABLE)) { OsInsertTCBToFreeList(taskCB); } } @@ -164,7 +164,7 @@ STATIC VOID OsRecyleFinishedTask(VOID) stackPtr = 0; OsRecycleTaskResources(taskCB, &stackPtr); LOS_IntRestore(intSave); - + (VOID)LOS_MemFree(OS_TASK_STACK_ADDR, (VOID *)stackPtr); intSave = LOS_IntLock(); } @@ -931,7 +931,6 @@ STATIC VOID OsTaskJoinPostUnsafe(LosTaskCB *taskCB) resumedTask = OS_TCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&(taskCB->joinList))); OsSchedTaskWake(resumedTask); } - taskCB->taskStatus |= OS_TASK_STATUS_EXIT; } } @@ -1003,7 +1002,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskJoin(UINT32 taskID, UINTPTR *retval) } intSave = LOS_IntLock(); - taskCB->taskStatus &= ~OS_TASK_STATUS_EXIT; + taskCB->taskStatus &= ~OS_TASK_FLAG_JOINABLE; OsRecycleTaskResources(taskCB, &stackPtr); LOS_IntRestore(intSave); (VOID)LOS_MemFree(OS_TASK_STACK_ADDR, (VOID *)stackPtr); @@ -1101,8 +1100,8 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskDelete(UINT32 taskID) } OsHookCall(LOS_HOOK_TYPE_TASK_DELETE, taskCB); - OsSchedTaskExit(taskCB); OsTaskJoinPostUnsafe(taskCB); + OsSchedTaskExit(taskCB); LOS_EventDestroy(&(taskCB->event)); taskCB->event.uwEventID = OS_NULL_INT; @@ -1122,7 +1121,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskDelete(UINT32 taskID) LOSCFG_TASK_DELETE_EXTENSION_HOOK(taskCB); if (taskCB->taskStatus & OS_TASK_STATUS_RUNNING) { - if (!(taskCB->taskStatus & OS_TASK_STATUS_EXIT)) { + if (!(taskCB->taskStatus & OS_TASK_FLAG_JOINABLE)) { taskCB->taskStatus |= OS_TASK_STATUS_UNUSED; OsRunningTaskDelete(taskID, taskCB); }