sched/pthread: simplify pthread_create() branch logic
remove redundant branch logic
Signed-off-by: chao an <anchao@lixiang.com>
diff --git a/sched/group/group.h b/sched/group/group.h
index 484239d..3ce0a89 100644
--- a/sched/group/group.h
+++ b/sched/group/group.h
@@ -59,8 +59,8 @@
int group_initialize(FAR struct task_tcb_s *tcb, uint8_t ttype);
void group_postinitialize(FAR struct task_tcb_s *tcb);
#ifndef CONFIG_DISABLE_PTHREAD
-int group_bind(FAR struct pthread_tcb_s *tcb);
-int group_join(FAR struct pthread_tcb_s *tcb);
+void group_bind(FAR struct pthread_tcb_s *tcb);
+void group_join(FAR struct pthread_tcb_s *tcb);
#endif
void group_leave(FAR struct tcb_s *tcb);
void group_drop(FAR struct task_group_s *group);
diff --git a/sched/group/group_join.c b/sched/group/group_join.c
index 48befc1..25a72c4 100644
--- a/sched/group/group_join.c
+++ b/sched/group/group_join.c
@@ -51,9 +51,6 @@
* Input Parameters:
* tcb - The TCB of the new "child" task that need to join the group.
*
- * Returned Value:
- * 0 (OK) on success; a negated errno value on failure.
- *
* Assumptions:
* - The parent task from which the group will be inherited is the task at
* the head of the ready to run list.
@@ -62,7 +59,7 @@
*
****************************************************************************/
-int group_bind(FAR struct pthread_tcb_s *tcb)
+void group_bind(FAR struct pthread_tcb_s *tcb)
{
FAR struct tcb_s *ptcb = this_task();
@@ -71,7 +68,6 @@
/* Copy the group reference from the parent to the child */
tcb->cmn.group = ptcb->group;
- return OK;
}
/****************************************************************************
@@ -83,9 +79,6 @@
* Input Parameters:
* tcb - The TCB of the new "child" task that need to join the group.
*
- * Returned Value:
- * 0 (OK) on success; a negated errno value on failure.
- *
* Assumptions:
* - The parent task from which the group will be inherited is the task at
* the head of the ready to run list.
@@ -94,7 +87,7 @@
*
****************************************************************************/
-int group_join(FAR struct pthread_tcb_s *tcb)
+void group_join(FAR struct pthread_tcb_s *tcb)
{
FAR struct task_group_s *group;
irqstate_t flags;
@@ -110,8 +103,6 @@
flags = spin_lock_irqsave(NULL);
sq_addfirst(&tcb->cmn.member, &group->tg_members);
spin_unlock_irqrestore(NULL, flags);
-
- return OK;
}
#endif /* !CONFIG_DISABLE_PTHREAD */
diff --git a/sched/pthread/pthread_create.c b/sched/pthread/pthread_create.c
index 1ba6c1b..ec0e5f8 100644
--- a/sched/pthread/pthread_create.c
+++ b/sched/pthread/pthread_create.c
@@ -178,15 +178,13 @@
FAR const pthread_attr_t *attr,
pthread_startroutine_t entry, pthread_addr_t arg)
{
+ pthread_attr_t default_attr = g_default_pthread_attr;
FAR struct pthread_tcb_s *ptcb;
struct sched_param param;
FAR struct tcb_s *parent;
int policy;
int errcode;
- pid_t pid;
int ret;
- bool group_joined = false;
- pthread_attr_t default_attr = g_default_pthread_attr;
DEBUGASSERT(trampoline != NULL);
@@ -226,12 +224,7 @@
* group).
*/
- ret = group_bind(ptcb);
- if (ret < 0)
- {
- errcode = ENOMEM;
- goto errout_with_tcb;
- }
+ group_bind(ptcb);
#ifdef CONFIG_ARCH_ADDRENV
/* Share the address environment of the parent task group. */
@@ -420,14 +413,7 @@
/* Join the parent's task group */
- ret = group_join(ptcb);
- if (ret < 0)
- {
- errcode = ENOMEM;
- goto errout_with_tcb;
- }
-
- group_joined = true;
+ group_join(ptcb);
/* Set the appropriate scheduling policy in the TCB */
@@ -454,47 +440,28 @@
#endif
}
- /* Get the assigned pid before we start the task (who knows what
- * could happen to ptcb after this!).
- */
-
- pid = ptcb->cmn.pid;
-
/* Then activate the task */
sched_lock();
- if (ret == OK)
+
+ nxtask_activate((FAR struct tcb_s *)ptcb);
+
+ /* Return the thread information to the caller */
+
+ if (thread != NULL)
{
- nxtask_activate((FAR struct tcb_s *)ptcb);
-
- /* Return the thread information to the caller */
-
- if (thread)
- {
- *thread = (pthread_t)pid;
- }
-
- sched_unlock();
- }
- else
- {
- sched_unlock();
- dq_rem((FAR dq_entry_t *)ptcb, list_inactivetasks());
-
- errcode = EIO;
- goto errout_with_tcb;
+ *thread = (pthread_t)ptcb->cmn.pid;
}
- return ret;
+ sched_unlock();
+
+ return OK;
errout_with_tcb:
- /* Clear group binding */
+ /* Since we do not join the group, assign group to NULL to clear binding */
- if (ptcb && !group_joined)
- {
- ptcb->cmn.group = NULL;
- }
+ ptcb->cmn.group = NULL;
nxsched_release_tcb((FAR struct tcb_s *)ptcb, TCB_FLAG_TTYPE_PTHREAD);
return errcode;