diff --git a/sched/environ/env_dup.c b/sched/environ/env_dup.c index 8a41b393e98ce..389284b9a4229 100644 --- a/sched/environ/env_dup.c +++ b/sched/environ/env_dup.c @@ -72,7 +72,7 @@ int env_dup(FAR struct task_group_s *group, FAR char * const *envcp) /* Is there an environment ? */ - if (envcp != NULL) + if (envcp != NULL && group->tg_envp == NULL) { /* Pre-emption must be disabled throughout the following because the * environment may be shared. diff --git a/sched/group/group_create.c b/sched/group/group_create.c index aba468d817288..244421a4447c2 100644 --- a/sched/group/group_create.c +++ b/sched/group/group_create.c @@ -238,5 +238,6 @@ void group_postinitialize(FAR struct task_tcb_s *tcb) * task has exited. */ - group->tg_pid = tcb->cmn.pid; + group->tg_pid = (group == &g_kthread_group) ? group->tg_pid : + tcb->cmn.pid; } diff --git a/sched/group/group_setuptaskfiles.c b/sched/group/group_setuptaskfiles.c index 4c074da887233..f5b31537e3518 100644 --- a/sched/group/group_setuptaskfiles.c +++ b/sched/group/group_setuptaskfiles.c @@ -79,7 +79,8 @@ int group_setuptaskfiles(FAR struct task_tcb_s *tcb, /* Duplicate the parent task's file descriptors */ - ret = files_duplist(&rtcb->group->tg_filelist, + ret = (group == rtcb->group) ? OK : + files_duplist(&rtcb->group->tg_filelist, &group->tg_filelist, actions, cloexec); if (ret >= 0 && actions != NULL) {