commit
e4cad073a9
|
@ -120,11 +120,9 @@ VOID OsTaskInsertToRecycleList(LosTaskCB *taskCB)
|
||||||
|
|
||||||
LITE_OS_SEC_TEXT_INIT VOID OsTaskJoinPostUnsafe(LosTaskCB *taskCB)
|
LITE_OS_SEC_TEXT_INIT VOID OsTaskJoinPostUnsafe(LosTaskCB *taskCB)
|
||||||
{
|
{
|
||||||
LosTaskCB *resumedTask = NULL;
|
|
||||||
|
|
||||||
if (taskCB->taskStatus & OS_TASK_FLAG_PTHREAD_JOIN) {
|
if (taskCB->taskStatus & OS_TASK_FLAG_PTHREAD_JOIN) {
|
||||||
if (!LOS_ListEmpty(&taskCB->joinList)) {
|
if (!LOS_ListEmpty(&taskCB->joinList)) {
|
||||||
resumedTask = OS_TCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&(taskCB->joinList)));
|
LosTaskCB *resumedTask = OS_TCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&(taskCB->joinList)));
|
||||||
OsTaskWakeClearPendMask(resumedTask);
|
OsTaskWakeClearPendMask(resumedTask);
|
||||||
OsSchedTaskWake(resumedTask);
|
OsSchedTaskWake(resumedTask);
|
||||||
}
|
}
|
||||||
|
@ -369,12 +367,11 @@ STATIC VOID OsTaskResourcesToFree(LosTaskCB *taskCB)
|
||||||
|
|
||||||
LITE_OS_SEC_TEXT VOID OsTaskCBRecycleToFree()
|
LITE_OS_SEC_TEXT VOID OsTaskCBRecycleToFree()
|
||||||
{
|
{
|
||||||
LosTaskCB *taskCB = NULL;
|
|
||||||
UINT32 intSave;
|
UINT32 intSave;
|
||||||
|
|
||||||
SCHEDULER_LOCK(intSave);
|
SCHEDULER_LOCK(intSave);
|
||||||
while (!LOS_ListEmpty(&g_taskRecycleList)) {
|
while (!LOS_ListEmpty(&g_taskRecycleList)) {
|
||||||
taskCB = OS_TCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&g_taskRecycleList));
|
LosTaskCB *taskCB = OS_TCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&g_taskRecycleList));
|
||||||
LOS_ListDelete(&taskCB->pendList);
|
LOS_ListDelete(&taskCB->pendList);
|
||||||
SCHEDULER_UNLOCK(intSave);
|
SCHEDULER_UNLOCK(intSave);
|
||||||
|
|
||||||
|
@ -391,8 +388,6 @@ LITE_OS_SEC_TEXT VOID OsTaskCBRecycleToFree()
|
||||||
*/
|
*/
|
||||||
LITE_OS_SEC_TEXT_INIT VOID OsTaskEntry(UINT32 taskID)
|
LITE_OS_SEC_TEXT_INIT VOID OsTaskEntry(UINT32 taskID)
|
||||||
{
|
{
|
||||||
LosTaskCB *taskCB = NULL;
|
|
||||||
|
|
||||||
LOS_ASSERT(!OS_TID_CHECK_INVALID(taskID));
|
LOS_ASSERT(!OS_TID_CHECK_INVALID(taskID));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -403,7 +398,7 @@ LITE_OS_SEC_TEXT_INIT VOID OsTaskEntry(UINT32 taskID)
|
||||||
LOS_SpinUnlock(&g_taskSpin);
|
LOS_SpinUnlock(&g_taskSpin);
|
||||||
(VOID)LOS_IntUnLock();
|
(VOID)LOS_IntUnLock();
|
||||||
|
|
||||||
taskCB = OS_TCB_FROM_TID(taskID);
|
LosTaskCB *taskCB = OS_TCB_FROM_TID(taskID);
|
||||||
taskCB->joinRetval = taskCB->taskEntry(taskCB->args[0], taskCB->args[1],
|
taskCB->joinRetval = taskCB->taskEntry(taskCB->args[0], taskCB->args[1],
|
||||||
taskCB->args[2], taskCB->args[3]); /* 2 & 3: just for args array index */
|
taskCB->args[2], taskCB->args[3]); /* 2 & 3: just for args array index */
|
||||||
if (!(taskCB->taskStatus & OS_TASK_FLAG_PTHREAD_JOIN)) {
|
if (!(taskCB->taskStatus & OS_TASK_FLAG_PTHREAD_JOIN)) {
|
||||||
|
@ -530,7 +525,6 @@ STATIC UINT32 OsTaskCBInit(LosTaskCB *taskCB, const TSK_INIT_PARAM_S *initParam,
|
||||||
LITE_OS_SEC_TEXT LosTaskCB *OsGetFreeTaskCB(VOID)
|
LITE_OS_SEC_TEXT LosTaskCB *OsGetFreeTaskCB(VOID)
|
||||||
{
|
{
|
||||||
UINT32 intSave;
|
UINT32 intSave;
|
||||||
LosTaskCB *taskCB = NULL;
|
|
||||||
|
|
||||||
SCHEDULER_LOCK(intSave);
|
SCHEDULER_LOCK(intSave);
|
||||||
if (LOS_ListEmpty(&g_losFreeTask)) {
|
if (LOS_ListEmpty(&g_losFreeTask)) {
|
||||||
|
@ -539,7 +533,7 @@ LITE_OS_SEC_TEXT LosTaskCB *OsGetFreeTaskCB(VOID)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
taskCB = OS_TCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&g_losFreeTask));
|
LosTaskCB *taskCB = OS_TCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&g_losFreeTask));
|
||||||
LOS_ListDelete(LOS_DL_LIST_FIRST(&g_losFreeTask));
|
LOS_ListDelete(LOS_DL_LIST_FIRST(&g_losFreeTask));
|
||||||
SCHEDULER_UNLOCK(intSave);
|
SCHEDULER_UNLOCK(intSave);
|
||||||
|
|
||||||
|
@ -550,8 +544,6 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskCreateOnly(UINT32 *taskID, TSK_INIT_PARAM_S
|
||||||
{
|
{
|
||||||
UINT32 intSave, errRet;
|
UINT32 intSave, errRet;
|
||||||
VOID *topStack = NULL;
|
VOID *topStack = NULL;
|
||||||
VOID *stackPtr = NULL;
|
|
||||||
LosTaskCB *taskCB = NULL;
|
|
||||||
VOID *pool = NULL;
|
VOID *pool = NULL;
|
||||||
|
|
||||||
errRet = OsTaskCreateParamCheck(taskID, initParam, &pool);
|
errRet = OsTaskCreateParamCheck(taskID, initParam, &pool);
|
||||||
|
@ -559,7 +551,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskCreateOnly(UINT32 *taskID, TSK_INIT_PARAM_S
|
||||||
return errRet;
|
return errRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
taskCB = OsGetFreeTaskCB();
|
LosTaskCB *taskCB = OsGetFreeTaskCB();
|
||||||
if (taskCB == NULL) {
|
if (taskCB == NULL) {
|
||||||
errRet = LOS_ERRNO_TSK_TCB_UNAVAILABLE;
|
errRet = LOS_ERRNO_TSK_TCB_UNAVAILABLE;
|
||||||
goto LOS_ERREND;
|
goto LOS_ERREND;
|
||||||
|
@ -576,7 +568,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskCreateOnly(UINT32 *taskID, TSK_INIT_PARAM_S
|
||||||
goto LOS_ERREND_REWIND_SYNC;
|
goto LOS_ERREND_REWIND_SYNC;
|
||||||
}
|
}
|
||||||
|
|
||||||
stackPtr = OsTaskStackInit(taskCB->taskID, initParam->uwStackSize, topStack, TRUE);
|
VOID *stackPtr = OsTaskStackInit(taskCB->taskID, initParam->uwStackSize, topStack, TRUE);
|
||||||
errRet = OsTaskCBInit(taskCB, initParam, stackPtr, topStack);
|
errRet = OsTaskCBInit(taskCB, initParam, stackPtr, topStack);
|
||||||
if (errRet != LOS_OK) {
|
if (errRet != LOS_OK) {
|
||||||
goto LOS_ERREND_TCB_INIT;
|
goto LOS_ERREND_TCB_INIT;
|
||||||
|
@ -746,14 +738,13 @@ LITE_OS_SEC_TEXT STATIC UINT32 OsTaskSuspend(LosTaskCB *taskCB)
|
||||||
LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskSuspend(UINT32 taskID)
|
LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskSuspend(UINT32 taskID)
|
||||||
{
|
{
|
||||||
UINT32 intSave;
|
UINT32 intSave;
|
||||||
LosTaskCB *taskCB = NULL;
|
|
||||||
UINT32 errRet;
|
UINT32 errRet;
|
||||||
|
|
||||||
if (OS_TID_CHECK_INVALID(taskID)) {
|
if (OS_TID_CHECK_INVALID(taskID)) {
|
||||||
return LOS_ERRNO_TSK_ID_INVALID;
|
return LOS_ERRNO_TSK_ID_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
taskCB = OS_TCB_FROM_TID(taskID);
|
LosTaskCB *taskCB = OS_TCB_FROM_TID(taskID);
|
||||||
if (taskCB->taskStatus & OS_TASK_FLAG_SYSTEM_TASK) {
|
if (taskCB->taskStatus & OS_TASK_FLAG_SYSTEM_TASK) {
|
||||||
return LOS_ERRNO_TSK_OPERATE_SYSTEM_TASK;
|
return LOS_ERRNO_TSK_OPERATE_SYSTEM_TASK;
|
||||||
}
|
}
|
||||||
|
@ -872,6 +863,10 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskDelete(UINT32 taskID)
|
||||||
|
|
||||||
LosTaskCB *taskCB = OS_TCB_FROM_TID(taskID);
|
LosTaskCB *taskCB = OS_TCB_FROM_TID(taskID);
|
||||||
if (taskCB == OsCurrTaskGet()) {
|
if (taskCB == OsCurrTaskGet()) {
|
||||||
|
if (!OsPreemptable()) {
|
||||||
|
return LOS_ERRNO_TSK_DELETE_LOCKED;
|
||||||
|
}
|
||||||
|
|
||||||
OsRunningTaskToExit(taskCB, OS_PRO_EXIT_OK);
|
OsRunningTaskToExit(taskCB, OS_PRO_EXIT_OK);
|
||||||
return LOS_NOK;
|
return LOS_NOK;
|
||||||
}
|
}
|
||||||
|
@ -909,14 +904,13 @@ LOS_ERREND:
|
||||||
LITE_OS_SEC_TEXT UINT32 LOS_TaskDelay(UINT32 tick)
|
LITE_OS_SEC_TEXT UINT32 LOS_TaskDelay(UINT32 tick)
|
||||||
{
|
{
|
||||||
UINT32 intSave;
|
UINT32 intSave;
|
||||||
LosTaskCB *runTask = NULL;
|
|
||||||
|
|
||||||
if (OS_INT_ACTIVE) {
|
if (OS_INT_ACTIVE) {
|
||||||
PRINT_ERR("In interrupt not allow delay task!\n");
|
PRINT_ERR("In interrupt not allow delay task!\n");
|
||||||
return LOS_ERRNO_TSK_DELAY_IN_INT;
|
return LOS_ERRNO_TSK_DELAY_IN_INT;
|
||||||
}
|
}
|
||||||
|
|
||||||
runTask = OsCurrTaskGet();
|
LosTaskCB *runTask = OsCurrTaskGet();
|
||||||
if (runTask->taskStatus & OS_TASK_FLAG_SYSTEM_TASK) {
|
if (runTask->taskStatus & OS_TASK_FLAG_SYSTEM_TASK) {
|
||||||
OsBackTrace();
|
OsBackTrace();
|
||||||
return LOS_ERRNO_TSK_OPERATE_SYSTEM_TASK;
|
return LOS_ERRNO_TSK_OPERATE_SYSTEM_TASK;
|
||||||
|
@ -941,14 +935,13 @@ LITE_OS_SEC_TEXT UINT32 LOS_TaskDelay(UINT32 tick)
|
||||||
LITE_OS_SEC_TEXT_MINOR UINT16 LOS_TaskPriGet(UINT32 taskID)
|
LITE_OS_SEC_TEXT_MINOR UINT16 LOS_TaskPriGet(UINT32 taskID)
|
||||||
{
|
{
|
||||||
UINT32 intSave;
|
UINT32 intSave;
|
||||||
LosTaskCB *taskCB = NULL;
|
|
||||||
UINT16 priority;
|
UINT16 priority;
|
||||||
|
|
||||||
if (OS_TID_CHECK_INVALID(taskID)) {
|
if (OS_TID_CHECK_INVALID(taskID)) {
|
||||||
return (UINT16)OS_INVALID;
|
return (UINT16)OS_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
taskCB = OS_TCB_FROM_TID(taskID);
|
LosTaskCB *taskCB = OS_TCB_FROM_TID(taskID);
|
||||||
SCHEDULER_LOCK(intSave);
|
SCHEDULER_LOCK(intSave);
|
||||||
if (taskCB->taskStatus & OS_TASK_STATUS_UNUSED) {
|
if (taskCB->taskStatus & OS_TASK_STATUS_UNUSED) {
|
||||||
SCHEDULER_UNLOCK(intSave);
|
SCHEDULER_UNLOCK(intSave);
|
||||||
|
@ -963,7 +956,6 @@ LITE_OS_SEC_TEXT_MINOR UINT16 LOS_TaskPriGet(UINT32 taskID)
|
||||||
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_TaskPriSet(UINT32 taskID, UINT16 taskPrio)
|
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_TaskPriSet(UINT32 taskID, UINT16 taskPrio)
|
||||||
{
|
{
|
||||||
UINT32 intSave;
|
UINT32 intSave;
|
||||||
LosTaskCB *taskCB = NULL;
|
|
||||||
|
|
||||||
if (taskPrio > OS_TASK_PRIORITY_LOWEST) {
|
if (taskPrio > OS_TASK_PRIORITY_LOWEST) {
|
||||||
return LOS_ERRNO_TSK_PRIOR_ERROR;
|
return LOS_ERRNO_TSK_PRIOR_ERROR;
|
||||||
|
@ -973,7 +965,7 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_TaskPriSet(UINT32 taskID, UINT16 taskPrio)
|
||||||
return LOS_ERRNO_TSK_ID_INVALID;
|
return LOS_ERRNO_TSK_ID_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
taskCB = OS_TCB_FROM_TID(taskID);
|
LosTaskCB *taskCB = OS_TCB_FROM_TID(taskID);
|
||||||
if (taskCB->taskStatus & OS_TASK_FLAG_SYSTEM_TASK) {
|
if (taskCB->taskStatus & OS_TASK_FLAG_SYSTEM_TASK) {
|
||||||
return LOS_ERRNO_TSK_OPERATE_SYSTEM_TASK;
|
return LOS_ERRNO_TSK_OPERATE_SYSTEM_TASK;
|
||||||
}
|
}
|
||||||
|
@ -1048,7 +1040,6 @@ LITE_OS_SEC_TEXT_MINOR VOID LOS_TaskUnlock(VOID)
|
||||||
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_TaskInfoGet(UINT32 taskID, TSK_INFO_S *taskInfo)
|
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_TaskInfoGet(UINT32 taskID, TSK_INFO_S *taskInfo)
|
||||||
{
|
{
|
||||||
UINT32 intSave;
|
UINT32 intSave;
|
||||||
LosTaskCB *taskCB = NULL;
|
|
||||||
|
|
||||||
if (taskInfo == NULL) {
|
if (taskInfo == NULL) {
|
||||||
return LOS_ERRNO_TSK_PTR_NULL;
|
return LOS_ERRNO_TSK_PTR_NULL;
|
||||||
|
@ -1058,7 +1049,7 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_TaskInfoGet(UINT32 taskID, TSK_INFO_S *taskInf
|
||||||
return LOS_ERRNO_TSK_ID_INVALID;
|
return LOS_ERRNO_TSK_ID_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
taskCB = OS_TCB_FROM_TID(taskID);
|
LosTaskCB *taskCB = OS_TCB_FROM_TID(taskID);
|
||||||
SCHEDULER_LOCK(intSave);
|
SCHEDULER_LOCK(intSave);
|
||||||
if (taskCB->taskStatus & OS_TASK_STATUS_UNUSED) {
|
if (taskCB->taskStatus & OS_TASK_STATUS_UNUSED) {
|
||||||
SCHEDULER_UNLOCK(intSave);
|
SCHEDULER_UNLOCK(intSave);
|
||||||
|
@ -1116,7 +1107,6 @@ LITE_OS_SEC_TEXT BOOL OsTaskCpuAffiSetUnsafe(UINT32 taskID, UINT16 newCpuAffiMas
|
||||||
|
|
||||||
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_TaskCpuAffiSet(UINT32 taskID, UINT16 cpuAffiMask)
|
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_TaskCpuAffiSet(UINT32 taskID, UINT16 cpuAffiMask)
|
||||||
{
|
{
|
||||||
LosTaskCB *taskCB = NULL;
|
|
||||||
BOOL needSched = FALSE;
|
BOOL needSched = FALSE;
|
||||||
UINT32 intSave;
|
UINT32 intSave;
|
||||||
UINT16 currCpuMask;
|
UINT16 currCpuMask;
|
||||||
|
@ -1129,7 +1119,7 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_TaskCpuAffiSet(UINT32 taskID, UINT16 cpuAffiMa
|
||||||
return LOS_ERRNO_TSK_CPU_AFFINITY_MASK_ERR;
|
return LOS_ERRNO_TSK_CPU_AFFINITY_MASK_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
taskCB = OS_TCB_FROM_TID(taskID);
|
LosTaskCB *taskCB = OS_TCB_FROM_TID(taskID);
|
||||||
SCHEDULER_LOCK(intSave);
|
SCHEDULER_LOCK(intSave);
|
||||||
if (taskCB->taskStatus & OS_TASK_STATUS_UNUSED) {
|
if (taskCB->taskStatus & OS_TASK_STATUS_UNUSED) {
|
||||||
SCHEDULER_UNLOCK(intSave);
|
SCHEDULER_UNLOCK(intSave);
|
||||||
|
@ -1150,7 +1140,6 @@ LITE_OS_SEC_TEXT_MINOR UINT16 LOS_TaskCpuAffiGet(UINT32 taskID)
|
||||||
{
|
{
|
||||||
#ifdef LOSCFG_KERNEL_SMP
|
#ifdef LOSCFG_KERNEL_SMP
|
||||||
#define INVALID_CPU_AFFI_MASK 0
|
#define INVALID_CPU_AFFI_MASK 0
|
||||||
LosTaskCB *taskCB = NULL;
|
|
||||||
UINT16 cpuAffiMask;
|
UINT16 cpuAffiMask;
|
||||||
UINT32 intSave;
|
UINT32 intSave;
|
||||||
|
|
||||||
|
@ -1158,7 +1147,7 @@ LITE_OS_SEC_TEXT_MINOR UINT16 LOS_TaskCpuAffiGet(UINT32 taskID)
|
||||||
return INVALID_CPU_AFFI_MASK;
|
return INVALID_CPU_AFFI_MASK;
|
||||||
}
|
}
|
||||||
|
|
||||||
taskCB = OS_TCB_FROM_TID(taskID);
|
LosTaskCB *taskCB = OS_TCB_FROM_TID(taskID);
|
||||||
SCHEDULER_LOCK(intSave);
|
SCHEDULER_LOCK(intSave);
|
||||||
if (taskCB->taskStatus & OS_TASK_STATUS_UNUSED) {
|
if (taskCB->taskStatus & OS_TASK_STATUS_UNUSED) {
|
||||||
SCHEDULER_UNLOCK(intSave);
|
SCHEDULER_UNLOCK(intSave);
|
||||||
|
@ -1350,14 +1339,13 @@ LITE_OS_SEC_TEXT_INIT UINT32 OsCreateUserTask(UINT32 processID, TSK_INIT_PARAM_S
|
||||||
LITE_OS_SEC_TEXT INT32 LOS_GetTaskScheduler(INT32 taskID)
|
LITE_OS_SEC_TEXT INT32 LOS_GetTaskScheduler(INT32 taskID)
|
||||||
{
|
{
|
||||||
UINT32 intSave;
|
UINT32 intSave;
|
||||||
LosTaskCB *taskCB = NULL;
|
|
||||||
INT32 policy;
|
INT32 policy;
|
||||||
|
|
||||||
if (OS_TID_CHECK_INVALID(taskID)) {
|
if (OS_TID_CHECK_INVALID(taskID)) {
|
||||||
return -LOS_EINVAL;
|
return -LOS_EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
taskCB = OS_TCB_FROM_TID(taskID);
|
LosTaskCB *taskCB = OS_TCB_FROM_TID(taskID);
|
||||||
SCHEDULER_LOCK(intSave);
|
SCHEDULER_LOCK(intSave);
|
||||||
if (taskCB->taskStatus & OS_TASK_STATUS_UNUSED) {
|
if (taskCB->taskStatus & OS_TASK_STATUS_UNUSED) {
|
||||||
policy = -LOS_EINVAL;
|
policy = -LOS_EINVAL;
|
||||||
|
@ -1388,8 +1376,18 @@ LITE_OS_SEC_TEXT INT32 LOS_SetTaskScheduler(INT32 taskID, UINT16 policy, UINT16
|
||||||
return LOS_EINVAL;
|
return LOS_EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LosTaskCB *taskCB = OS_TCB_FROM_TID(taskID);
|
||||||
|
if (taskCB->taskStatus & OS_TASK_FLAG_SYSTEM_TASK) {
|
||||||
|
return LOS_EPERM;
|
||||||
|
}
|
||||||
|
|
||||||
SCHEDULER_LOCK(intSave);
|
SCHEDULER_LOCK(intSave);
|
||||||
needSched = OsSchedModifyTaskSchedParam(OS_TCB_FROM_TID(taskID), policy, priority);
|
if (taskCB->taskStatus & OS_TASK_STATUS_UNUSED) {
|
||||||
|
SCHEDULER_UNLOCK(intSave);
|
||||||
|
return LOS_EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
needSched = OsSchedModifyTaskSchedParam(taskCB, policy, priority);
|
||||||
SCHEDULER_UNLOCK(intSave);
|
SCHEDULER_UNLOCK(intSave);
|
||||||
|
|
||||||
LOS_MpSchedule(OS_MP_CPU_ALL);
|
LOS_MpSchedule(OS_MP_CPU_ALL);
|
||||||
|
@ -1414,9 +1412,15 @@ STATIC UINT32 OsTaskJoinCheck(UINT32 taskID)
|
||||||
return LOS_EINVAL;
|
return LOS_EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (taskID == OsCurrTaskGet()->taskID) {
|
LosTaskCB *taskCB = OS_TCB_FROM_TID(taskID);
|
||||||
|
if (taskCB->taskStatus & OS_TASK_FLAG_SYSTEM_TASK) {
|
||||||
|
return LOS_EPERM;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (taskCB == OsCurrTaskGet()) {
|
||||||
return LOS_EDEADLK;
|
return LOS_EDEADLK;
|
||||||
}
|
}
|
||||||
|
|
||||||
return LOS_OK;
|
return LOS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1424,7 +1428,6 @@ UINT32 LOS_TaskJoin(UINT32 taskID, UINTPTR *retval)
|
||||||
{
|
{
|
||||||
UINT32 intSave;
|
UINT32 intSave;
|
||||||
LosTaskCB *runTask = OsCurrTaskGet();
|
LosTaskCB *runTask = OsCurrTaskGet();
|
||||||
LosTaskCB *taskCB = NULL;
|
|
||||||
UINT32 errRet;
|
UINT32 errRet;
|
||||||
|
|
||||||
errRet = OsTaskJoinCheck(taskID);
|
errRet = OsTaskJoinCheck(taskID);
|
||||||
|
@ -1432,7 +1435,7 @@ UINT32 LOS_TaskJoin(UINT32 taskID, UINTPTR *retval)
|
||||||
return errRet;
|
return errRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
taskCB = OS_TCB_FROM_TID(taskID);
|
LosTaskCB *taskCB = OS_TCB_FROM_TID(taskID);
|
||||||
SCHEDULER_LOCK(intSave);
|
SCHEDULER_LOCK(intSave);
|
||||||
if (taskCB->taskStatus & OS_TASK_STATUS_UNUSED) {
|
if (taskCB->taskStatus & OS_TASK_STATUS_UNUSED) {
|
||||||
SCHEDULER_UNLOCK(intSave);
|
SCHEDULER_UNLOCK(intSave);
|
||||||
|
@ -1465,7 +1468,6 @@ UINT32 LOS_TaskDetach(UINT32 taskID)
|
||||||
{
|
{
|
||||||
UINT32 intSave;
|
UINT32 intSave;
|
||||||
LosTaskCB *runTask = OsCurrTaskGet();
|
LosTaskCB *runTask = OsCurrTaskGet();
|
||||||
LosTaskCB *taskCB = NULL;
|
|
||||||
UINT32 errRet;
|
UINT32 errRet;
|
||||||
|
|
||||||
if (OS_TID_CHECK_INVALID(taskID)) {
|
if (OS_TID_CHECK_INVALID(taskID)) {
|
||||||
|
@ -1476,7 +1478,7 @@ UINT32 LOS_TaskDetach(UINT32 taskID)
|
||||||
return LOS_EINTR;
|
return LOS_EINTR;
|
||||||
}
|
}
|
||||||
|
|
||||||
taskCB = OS_TCB_FROM_TID(taskID);
|
LosTaskCB *taskCB = OS_TCB_FROM_TID(taskID);
|
||||||
SCHEDULER_LOCK(intSave);
|
SCHEDULER_LOCK(intSave);
|
||||||
if (taskCB->taskStatus & OS_TASK_STATUS_UNUSED) {
|
if (taskCB->taskStatus & OS_TASK_STATUS_UNUSED) {
|
||||||
SCHEDULER_UNLOCK(intSave);
|
SCHEDULER_UNLOCK(intSave);
|
||||||
|
|
Loading…
Reference in New Issue