From ec88d1628937b3def6dd613246116f6bfa4141eb Mon Sep 17 00:00:00 2001 From: lurix Date: Mon, 13 Sep 2021 10:01:45 +0000 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DOsQueueMailFree?= =?UTF-8?q?=E6=8F=90=E6=97=A9=E9=87=8A=E6=94=BE=E5=86=85=E5=AD=98=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lurix --- kernel/src/los_queue.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/kernel/src/los_queue.c b/kernel/src/los_queue.c index 0245429a..6627a05c 100644 --- a/kernel/src/los_queue.c +++ b/kernel/src/los_queue.c @@ -526,12 +526,6 @@ LITE_OS_SEC_TEXT UINT32 OsQueueMailFree(UINT32 queueID, VOID *mailPool, VOID *ma } intSave = LOS_IntLock(); - - if (LOS_MemboxFree(mailPool, mailMem)) { - LOS_IntRestore(intSave); - return LOS_ERRNO_QUEUE_MAIL_FREE_ERROR; - } - queueCB = GET_QUEUE_HANDLE(queueID); if (queueCB->queueState == OS_QUEUE_UNUSED) { LOS_IntRestore(intSave); @@ -541,17 +535,24 @@ LITE_OS_SEC_TEXT UINT32 OsQueueMailFree(UINT32 queueID, VOID *mailPool, VOID *ma if (!LOS_ListEmpty(&queueCB->memList)) { resumedTask = OS_TCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&queueCB->memList)); OsSchedTaskWake(resumedTask); - mem = LOS_MemboxAlloc(mailPool); - if (mem == NULL) { - LOS_IntRestore(intSave); - return LOS_ERRNO_QUEUE_NO_MEMORY; - } - resumedTask->msg = mem; + /* When enters the current branch, means the resumed task already can get a available membox, + * so the resumedTask->msg can not be NULL. + */ + resumedTask->msg = mailMem; LOS_IntRestore(intSave); LOS_Schedule(); + } else { + /* No task waiting for the mailMem, + * so free it. + */ + if (LOS_MemboxFree(mailPool, mailMem)) { + LOS_IntRestore(intSave); + return LOS_ERRNO_QUEUE_MAIL_FREE_ERROR; + } LOS_IntRestore(intSave); } + return LOS_OK; } From 9c3a6901f1b305656ebcb5cf7e4349015e363887 Mon Sep 17 00:00:00 2001 From: lurix Date: Mon, 13 Sep 2021 10:56:43 +0000 Subject: [PATCH 2/3] =?UTF-8?q?chore:=20=E8=A7=A3=E5=86=B3=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E9=A3=8E=E6=A0=BC=E5=AF=BC=E8=87=B4=E7=9A=84=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lurix --- kernel/src/los_queue.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/kernel/src/los_queue.c b/kernel/src/los_queue.c index 6627a05c..b35e7838 100644 --- a/kernel/src/los_queue.c +++ b/kernel/src/los_queue.c @@ -512,7 +512,6 @@ END: *****************************************************************************/ LITE_OS_SEC_TEXT UINT32 OsQueueMailFree(UINT32 queueID, VOID *mailPool, VOID *mailMem) { - VOID *mem = (VOID *)NULL; UINT32 intSave; LosQueueCB *queueCB = (LosQueueCB *)NULL; LosTaskCB *resumedTask = (LosTaskCB *)NULL; @@ -534,14 +533,13 @@ LITE_OS_SEC_TEXT UINT32 OsQueueMailFree(UINT32 queueID, VOID *mailPool, VOID *ma if (!LOS_ListEmpty(&queueCB->memList)) { resumedTask = OS_TCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&queueCB->memList)); - OsSchedTaskWake(resumedTask); /* When enters the current branch, means the resumed task already can get a available membox, * so the resumedTask->msg can not be NULL. */ resumedTask->msg = mailMem; + OsSchedTaskWake(resumedTask); LOS_IntRestore(intSave); LOS_Schedule(); - } else { /* No task waiting for the mailMem, * so free it. @@ -637,7 +635,6 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_QueueInfoGet(UINT32 queueID, QUEUE_INFO_S *que intSave = LOS_IntLock(); queueCB = (LosQueueCB *)GET_QUEUE_HANDLE(queueID); - if (queueCB->queueState == OS_QUEUE_UNUSED) { ret = LOS_ERRNO_QUEUE_NOT_CREATE; goto QUEUE_END; @@ -652,15 +649,18 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_QueueInfoGet(UINT32 queueID, QUEUE_INFO_S *que queueInfo->writableCnt = queueCB->readWriteableCnt[OS_QUEUE_WRITE]; LOS_DL_LIST_FOR_EACH_ENTRY(tskCB, &queueCB->readWriteList[OS_QUEUE_READ], LosTaskCB, pendList) { - queueInfo->waitReadTask[OS_WAIT_TASK_ID_TO_ARRAY_IDX(tskCB->taskID)] |= (1 << (tskCB->taskID & OS_WAIT_TASK_ARRAY_ELEMENT_MASK)); + queueInfo->waitReadTask[OS_WAIT_TASK_ID_TO_ARRAY_IDX(tskCB->taskID)] |= + (1 << (tskCB->taskID & OS_WAIT_TASK_ARRAY_ELEMENT_MASK)); } LOS_DL_LIST_FOR_EACH_ENTRY(tskCB, &queueCB->readWriteList[OS_QUEUE_WRITE], LosTaskCB, pendList) { - queueInfo->waitWriteTask[OS_WAIT_TASK_ID_TO_ARRAY_IDX(tskCB->taskID)] |= (1 << (tskCB->taskID & OS_WAIT_TASK_ARRAY_ELEMENT_MASK)); + queueInfo->waitWriteTask[OS_WAIT_TASK_ID_TO_ARRAY_IDX(tskCB->taskID)] |= + (1 << (tskCB->taskID & OS_WAIT_TASK_ARRAY_ELEMENT_MASK)); } LOS_DL_LIST_FOR_EACH_ENTRY(tskCB, &queueCB->memList, LosTaskCB, pendList) { - queueInfo->waitMemTask[OS_WAIT_TASK_ID_TO_ARRAY_IDX(tskCB->taskID)] |= (1 << (tskCB->taskID & OS_WAIT_TASK_ARRAY_ELEMENT_MASK)); + queueInfo->waitMemTask[OS_WAIT_TASK_ID_TO_ARRAY_IDX(tskCB->taskID)] |= + (1 << (tskCB->taskID & OS_WAIT_TASK_ARRAY_ELEMENT_MASK)); } QUEUE_END: From 902efbcea95c39156f6dff4a97476c7471ed3711 Mon Sep 17 00:00:00 2001 From: lurix Date: Wed, 15 Sep 2021 09:42:44 +0000 Subject: [PATCH 3/3] chore: update the comment. Signed-off-by: lurix --- kernel/src/los_queue.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/kernel/src/los_queue.c b/kernel/src/los_queue.c index b35e7838..12f45069 100644 --- a/kernel/src/los_queue.c +++ b/kernel/src/los_queue.c @@ -533,17 +533,15 @@ LITE_OS_SEC_TEXT UINT32 OsQueueMailFree(UINT32 queueID, VOID *mailPool, VOID *ma if (!LOS_ListEmpty(&queueCB->memList)) { resumedTask = OS_TCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&queueCB->memList)); - /* When enters the current branch, means the resumed task already can get a available membox, - * so the resumedTask->msg can not be NULL. + /* When enter this branch, it means the resumed task can + * get an available mailMem. */ resumedTask->msg = mailMem; OsSchedTaskWake(resumedTask); LOS_IntRestore(intSave); LOS_Schedule(); } else { - /* No task waiting for the mailMem, - * so free it. - */ + /* No task waiting for the mailMem, so free it. */ if (LOS_MemboxFree(mailPool, mailMem)) { LOS_IntRestore(intSave); return LOS_ERRNO_QUEUE_MAIL_FREE_ERROR;