refactor: 优化任务状态,EXIT状态仅表示任务已退出
Signed-off-by: zhushengle <zhushengle@huawei.com> Change-Id: I53e98540af4deb44e64f6879df340b27efb201b8
This commit is contained in:
parent
e34c4050f9
commit
4e9f8c71f9
|
@ -1503,6 +1503,11 @@ typedef struct {
|
||||||
LOSCFG_TASK_STRUCT_EXTENSION /**< Task extension field */
|
LOSCFG_TASK_STRUCT_EXTENSION /**< Task extension field */
|
||||||
} LosTaskCB;
|
} LosTaskCB;
|
||||||
|
|
||||||
|
STATIC INLINE BOOL OsTaskIsExit(const LosTaskCB *taskCB)
|
||||||
|
{
|
||||||
|
return ((taskCB->taskStatus & OS_TASK_STATUS_EXIT) != 0);
|
||||||
|
}
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
LosTaskCB *runTask;
|
LosTaskCB *runTask;
|
||||||
LosTaskCB *newTask;
|
LosTaskCB *newTask;
|
||||||
|
|
|
@ -268,6 +268,7 @@ VOID OsSchedTaskExit(LosTaskCB *taskCB)
|
||||||
OsDeleteSortLink(&taskCB->sortList);
|
OsDeleteSortLink(&taskCB->sortList);
|
||||||
taskCB->taskStatus &= ~(OS_TASK_STATUS_DELAY | OS_TASK_STATUS_PEND_TIME);
|
taskCB->taskStatus &= ~(OS_TASK_STATUS_DELAY | OS_TASK_STATUS_PEND_TIME);
|
||||||
}
|
}
|
||||||
|
taskCB->taskStatus |= OS_TASK_STATUS_EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID OsSchedYield(VOID)
|
VOID OsSchedYield(VOID)
|
||||||
|
|
|
@ -146,7 +146,7 @@ STATIC VOID OsRecycleTaskResources(LosTaskCB *taskCB, UINTPTR *stackPtr)
|
||||||
taskCB->topOfStack = (UINT32)NULL;
|
taskCB->topOfStack = (UINT32)NULL;
|
||||||
taskCB->taskStatus &= ~OS_TASK_FLAG_STACK_FREE;
|
taskCB->taskStatus &= ~OS_TASK_FLAG_STACK_FREE;
|
||||||
}
|
}
|
||||||
if (!(taskCB->taskStatus & OS_TASK_STATUS_EXIT)) {
|
if (!(taskCB->taskStatus & OS_TASK_FLAG_JOINABLE)) {
|
||||||
OsInsertTCBToFreeList(taskCB);
|
OsInsertTCBToFreeList(taskCB);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -931,7 +931,6 @@ STATIC VOID OsTaskJoinPostUnsafe(LosTaskCB *taskCB)
|
||||||
resumedTask = OS_TCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&(taskCB->joinList)));
|
resumedTask = OS_TCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&(taskCB->joinList)));
|
||||||
OsSchedTaskWake(resumedTask);
|
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();
|
intSave = LOS_IntLock();
|
||||||
taskCB->taskStatus &= ~OS_TASK_STATUS_EXIT;
|
taskCB->taskStatus &= ~OS_TASK_FLAG_JOINABLE;
|
||||||
OsRecycleTaskResources(taskCB, &stackPtr);
|
OsRecycleTaskResources(taskCB, &stackPtr);
|
||||||
LOS_IntRestore(intSave);
|
LOS_IntRestore(intSave);
|
||||||
(VOID)LOS_MemFree(OS_TASK_STACK_ADDR, (VOID *)stackPtr);
|
(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);
|
OsHookCall(LOS_HOOK_TYPE_TASK_DELETE, taskCB);
|
||||||
OsSchedTaskExit(taskCB);
|
|
||||||
OsTaskJoinPostUnsafe(taskCB);
|
OsTaskJoinPostUnsafe(taskCB);
|
||||||
|
OsSchedTaskExit(taskCB);
|
||||||
|
|
||||||
LOS_EventDestroy(&(taskCB->event));
|
LOS_EventDestroy(&(taskCB->event));
|
||||||
taskCB->event.uwEventID = OS_NULL_INT;
|
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);
|
LOSCFG_TASK_DELETE_EXTENSION_HOOK(taskCB);
|
||||||
|
|
||||||
if (taskCB->taskStatus & OS_TASK_STATUS_RUNNING) {
|
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;
|
taskCB->taskStatus |= OS_TASK_STATUS_UNUSED;
|
||||||
OsRunningTaskDelete(taskID, taskCB);
|
OsRunningTaskDelete(taskID, taskCB);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue