This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit af72a528f1135187bfe79df396cda24a0252f46e Author: zhangyuan21 <zhangyua...@xiaomi.com> AuthorDate: Thu Sep 22 10:31:40 2022 +0800 sched: merge waitsem and msgwaitq --- include/nuttx/sched.h | 10 ++-------- sched/mqueue/mq_rcvinternal.c | 8 ++++---- sched/mqueue/mq_recover.c | 12 ++++++++---- sched/mqueue/mq_sndinternal.c | 8 ++++---- sched/mqueue/mq_waitirq.c | 6 +++--- sched/semaphore/sem_post.c | 4 ++-- sched/semaphore/sem_recover.c | 8 ++++---- sched/semaphore/sem_trywait.c | 2 +- sched/semaphore/sem_wait.c | 8 ++++---- sched/semaphore/sem_waitirq.c | 4 ++-- 10 files changed, 34 insertions(+), 36 deletions(-) diff --git a/include/nuttx/sched.h b/include/nuttx/sched.h index e3eaed1658..fbf8e5dced 100644 --- a/include/nuttx/sched.h +++ b/include/nuttx/sched.h @@ -608,9 +608,9 @@ struct tcb_s FAR struct dspace_s *dspace; /* Allocated area for .bss and .data */ #endif - /* POSIX Semaphore Control Fields *****************************************/ + /* POSIX Semaphore and Message Queue Control Fields ***********************/ - sem_t *waitsem; /* Semaphore ID waiting on */ + FAR void *waitobj; /* Object thread waiting on */ /* POSIX Signal Control Fields ********************************************/ @@ -620,12 +620,6 @@ struct tcb_s sq_queue_t sigpostedq; /* List of posted signals */ siginfo_t sigunbinfo; /* Signal info when task unblocked */ - /* POSIX Named Message Queue Fields ***************************************/ - -#ifndef CONFIG_DISABLE_MQUEUE - FAR struct mqueue_inode_s *msgwaitq; /* Waiting for this message queue */ -#endif - /* Robust mutex support ***************************************************/ #if !defined(CONFIG_DISABLE_PTHREAD) && !defined(CONFIG_PTHREAD_MUTEX_UNSAFE) diff --git a/sched/mqueue/mq_rcvinternal.c b/sched/mqueue/mq_rcvinternal.c index 3dc6e48c5a..9d5c642c39 100644 --- a/sched/mqueue/mq_rcvinternal.c +++ b/sched/mqueue/mq_rcvinternal.c @@ -166,8 +166,8 @@ int nxmq_wait_receive(FAR struct mqueue_inode_s *msgq, { /* Yes.. Block and try again */ - rtcb = this_task(); - rtcb->msgwaitq = msgq; + rtcb = this_task(); + rtcb->waitobj = msgq; msgq->nwaitnotempty++; /* Initialize the 'errcode" used to communication wake-up error @@ -286,7 +286,7 @@ ssize_t nxmq_do_receive(FAR struct mqueue_inode_s *msgq, */ for (btcb = (FAR struct tcb_s *)g_waitingformqnotfull.head; - btcb && btcb->msgwaitq != msgq; + btcb && btcb->waitobj != msgq; btcb = btcb->flink) { } @@ -303,7 +303,7 @@ ssize_t nxmq_do_receive(FAR struct mqueue_inode_s *msgq, wd_cancel(&btcb->waitdog); } - btcb->msgwaitq = NULL; + btcb->waitobj = NULL; msgq->nwaitnotfull--; up_unblock_task(btcb); } diff --git a/sched/mqueue/mq_recover.c b/sched/mqueue/mq_recover.c index 2fb1bf3383..ab9c1eabca 100644 --- a/sched/mqueue/mq_recover.c +++ b/sched/mqueue/mq_recover.c @@ -56,6 +56,8 @@ void nxmq_recover(FAR struct tcb_s *tcb) { + FAR struct mqueue_inode_s *msgq; + /* If were were waiting for a timed message queue event, then the * timer was canceled and deleted in nxtask_recover() before this * function was called. @@ -63,12 +65,14 @@ void nxmq_recover(FAR struct tcb_s *tcb) /* Was the task waiting for a message queue to become non-empty? */ + msgq = tcb->waitobj; + if (tcb->task_state == TSTATE_WAIT_MQNOTEMPTY) { /* Decrement the count of waiters */ - DEBUGASSERT(tcb->msgwaitq && tcb->msgwaitq->nwaitnotempty > 0); - tcb->msgwaitq->nwaitnotempty--; + DEBUGASSERT(msgq && msgq->nwaitnotempty > 0); + msgq->nwaitnotempty--; } /* Was the task waiting for a message queue to become non-full? */ @@ -77,7 +81,7 @@ void nxmq_recover(FAR struct tcb_s *tcb) { /* Decrement the count of waiters */ - DEBUGASSERT(tcb->msgwaitq && tcb->msgwaitq->nwaitnotfull > 0); - tcb->msgwaitq->nwaitnotfull--; + DEBUGASSERT(msgq && msgq->nwaitnotfull > 0); + msgq->nwaitnotfull--; } } diff --git a/sched/mqueue/mq_sndinternal.c b/sched/mqueue/mq_sndinternal.c index 5dc27106ea..c924ba7df4 100644 --- a/sched/mqueue/mq_sndinternal.c +++ b/sched/mqueue/mq_sndinternal.c @@ -252,8 +252,8 @@ int nxmq_wait_send(FAR struct mqueue_inode_s *msgq, int oflags) * When we are unblocked, we will try again */ - rtcb = this_task(); - rtcb->msgwaitq = msgq; + rtcb = this_task(); + rtcb->waitobj = msgq; msgq->nwaitnotfull++; /* Initialize the errcode used to communication wake-up error @@ -396,7 +396,7 @@ int nxmq_do_send(FAR struct mqueue_inode_s *msgq, */ for (btcb = (FAR struct tcb_s *)g_waitingformqnotempty.head; - btcb && btcb->msgwaitq != msgq; + btcb && btcb->waitobj != msgq; btcb = btcb->flink) { } @@ -410,7 +410,7 @@ int nxmq_do_send(FAR struct mqueue_inode_s *msgq, wd_cancel(&btcb->waitdog); } - btcb->msgwaitq = NULL; + btcb->waitobj = NULL; msgq->nwaitnotempty--; up_unblock_task(btcb); } diff --git a/sched/mqueue/mq_waitirq.c b/sched/mqueue/mq_waitirq.c index 9f2a014d83..a9c9767cb6 100644 --- a/sched/mqueue/mq_waitirq.c +++ b/sched/mqueue/mq_waitirq.c @@ -71,7 +71,7 @@ void nxmq_wait_irq(FAR struct tcb_s *wtcb, int errcode) /* It is possible that an interrupt/context switch beat us to the punch and * already changed the task's state. NOTE: The operations within the if - * are safe because interrupts are always disabled with the msgwaitq, + * are safe because interrupts are always disabled with the waitobj, * nwaitnotempty, and nwaitnotfull fields are modified. */ @@ -80,10 +80,10 @@ void nxmq_wait_irq(FAR struct tcb_s *wtcb, int errcode) { /* Get the message queue associated with the waiter from the TCB */ - msgq = wtcb->msgwaitq; + msgq = wtcb->waitobj; DEBUGASSERT(msgq); - wtcb->msgwaitq = NULL; + wtcb->waitobj = NULL; /* Decrement the count of waiters and cancel the wait */ diff --git a/sched/semaphore/sem_post.c b/sched/semaphore/sem_post.c index 828dffa13f..20f42a4103 100644 --- a/sched/semaphore/sem_post.c +++ b/sched/semaphore/sem_post.c @@ -140,7 +140,7 @@ int nxsem_post(FAR sem_t *sem) */ for (stcb = (FAR struct tcb_s *)g_waitingforsemaphore.head; - (stcb && stcb->waitsem != sem); + (stcb && stcb->waitobj != sem); stcb = stcb->flink); if (stcb != NULL) @@ -157,7 +157,7 @@ int nxsem_post(FAR sem_t *sem) /* It is, let the task take the semaphore */ - stcb->waitsem = NULL; + stcb->waitobj = NULL; /* Restart the waiting task. */ diff --git a/sched/semaphore/sem_recover.c b/sched/semaphore/sem_recover.c index 40f297bd65..892dc5b3eb 100644 --- a/sched/semaphore/sem_recover.c +++ b/sched/semaphore/sem_recover.c @@ -72,17 +72,17 @@ void nxsem_recover(FAR struct tcb_s *tcb) * restart the exiting task. * * NOTE: In the case that the task is waiting we can assume: (1) That the - * task state is TSTATE_WAIT_SEM and (2) that the 'waitsem' in the TCB is + * task state is TSTATE_WAIT_SEM and (2) that the 'waitobj' in the TCB is * non-null. If we get here via pthread_cancel() or via task_delete(), * then the task state should be preserved; it will be altered in other - * cases but in those cases waitsem should be NULL anyway (but we do not + * cases but in those cases waitobj should be NULL anyway (but we do not * enforce that here). */ flags = enter_critical_section(); if (tcb->task_state == TSTATE_WAIT_SEM) { - sem_t *sem = tcb->waitsem; + FAR sem_t *sem = tcb->waitobj; DEBUGASSERT(sem != NULL && sem->semcount < 0); /* Restore the correct priority of all threads that hold references @@ -105,7 +105,7 @@ void nxsem_recover(FAR struct tcb_s *tcb) * semaphore list. */ - tcb->waitsem = NULL; + tcb->waitobj = NULL; } /* Release all semphore holders for the task */ diff --git a/sched/semaphore/sem_trywait.c b/sched/semaphore/sem_trywait.c index 4e9cc0ea01..6fe483c51d 100644 --- a/sched/semaphore/sem_trywait.c +++ b/sched/semaphore/sem_trywait.c @@ -91,7 +91,7 @@ int nxsem_trywait(FAR sem_t *sem) sem->semcount--; nxsem_add_holder(sem); - rtcb->waitsem = NULL; + rtcb->waitobj = NULL; ret = OK; } else diff --git a/sched/semaphore/sem_wait.c b/sched/semaphore/sem_wait.c index 29580d72cc..67d6af70f4 100644 --- a/sched/semaphore/sem_wait.c +++ b/sched/semaphore/sem_wait.c @@ -98,7 +98,7 @@ int nxsem_wait(FAR sem_t *sem) sem->semcount--; nxsem_add_holder(sem); - rtcb->waitsem = NULL; + rtcb->waitobj = NULL; ret = OK; } @@ -112,7 +112,7 @@ int nxsem_wait(FAR sem_t *sem) * semaphore */ - DEBUGASSERT(rtcb->waitsem == NULL); + DEBUGASSERT(rtcb->waitobj == NULL); /* Handle the POSIX semaphore (but don't set the owner yet) */ @@ -120,7 +120,7 @@ int nxsem_wait(FAR sem_t *sem) /* Save the waited on semaphore in the TCB */ - rtcb->waitsem = sem; + rtcb->waitobj = sem; /* If priority inheritance is enabled, then check the priority of * the holder of the semaphore. @@ -166,7 +166,7 @@ int nxsem_wait(FAR sem_t *sem) * - nxsem_canceled() was called to restore the priority of all * threads that hold a reference to the semaphore, * - The semaphore count was decremented, and - * - tcb->waitsem was nullifed. + * - tcb->waitobj was nullifed. * * It is necessary to do these things in sem_waitirq.c because a * long time may elapse between the time that the signal was issued diff --git a/sched/semaphore/sem_waitirq.c b/sched/semaphore/sem_waitirq.c index 08170b55cc..89f977afd1 100644 --- a/sched/semaphore/sem_waitirq.c +++ b/sched/semaphore/sem_waitirq.c @@ -80,7 +80,7 @@ void nxsem_wait_irq(FAR struct tcb_s *wtcb, int errcode) if (wtcb->task_state == TSTATE_WAIT_SEM) { - sem_t *sem = wtcb->waitsem; + FAR sem_t *sem = wtcb->waitobj; DEBUGASSERT(sem != NULL && sem->semcount < 0); /* Restore the correct priority of all threads that hold references @@ -99,7 +99,7 @@ void nxsem_wait_irq(FAR struct tcb_s *wtcb, int errcode) /* Indicate that the semaphore wait is over. */ - wtcb->waitsem = NULL; + wtcb->waitobj = NULL; /* Mark the errno value for the thread. */