From cd949ddae0aa4e7291b0b7f6ba83c2034cdf1301 Mon Sep 17 00:00:00 2001 From: zhushengle Date: Tue, 4 Jan 2022 10:22:44 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dpthread=5Fcreate?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 系统调度未起时,调用pthread_create失败 系统调度未起时,系统无运行任务,获取当前线程失败 2. 先创建任务再给任务赋值name,且未加锁保护,和shell存在静态 Close #I4P78J Signed-off-by: zhushengle Change-Id: I2570dcf90953ced06400a0a22193cc81719fb546 --- kal/posix/src/pthread.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/kal/posix/src/pthread.c b/kal/posix/src/pthread.c index aa2e142d..364f7ab6 100644 --- a/kal/posix/src/pthread.c +++ b/kal/posix/src/pthread.c @@ -98,12 +98,14 @@ static int PthreadCreateAttrInit(const pthread_attr_t *attr, void *(*startRoutin taskInitParam->uwStackSize = threadAttr->stacksize; if (threadAttr->inheritsched == PTHREAD_EXPLICIT_SCHED) { taskInitParam->usTaskPrio = (UINT16)threadAttr->schedparam.sched_priority; - } else { + } else if (IsPthread(pthread_self())) { ret = pthread_getschedparam(pthread_self(), &policy, &schedParam); if (ret != 0) { return ret; } taskInitParam->usTaskPrio = (UINT16)schedParam.sched_priority; + } else { + taskInitParam->usTaskPrio = (UINT16)threadAttr->schedparam.sched_priority; } PthreadData *pthreadData = (PthreadData *)malloc(sizeof(PthreadData)); @@ -140,6 +142,9 @@ int pthread_create(pthread_t *thread, const pthread_attr_t *attr, return ret; } + /* set pthread default name */ + (void)sprintf_s(taskInitParam.pcName, PTHREAD_NAMELEN, "pthread%u", taskID); + if (LOS_TaskCreateOnly(&taskID, &taskInitParam) != LOS_OK) { free((VOID *)(UINTPTR)taskInitParam.uwArg); return EINVAL; @@ -154,9 +159,6 @@ int pthread_create(pthread_t *thread, const pthread_attr_t *attr, LOS_ListAdd(&g_pthreadListHead, &pthreadData->threadList); LOS_IntRestore(intSave); - /* set pthread default name */ - (void)sprintf_s(taskInitParam.pcName, PTHREAD_NAMELEN, "pthread%u", taskID); - (void)LOS_TaskResume(taskID); *thread = (pthread_t)taskID;