You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by pk...@apache.org on 2023/09/07 21:54:13 UTC

[nuttx] 01/02: Revert "fix wait after vfork return error"

This is an automated email from the ASF dual-hosted git repository.

pkarashchenko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit eba2f163edd5de53c0310d35aade3db44382cb17
Author: yangyalei <ya...@xiaomi.com>
AuthorDate: Thu Sep 7 21:28:01 2023 +0800

    Revert "fix wait after vfork return error"
    
    This reverts commit 50428979d0d1bb4c24c89bcc36a914158c56b373.
---
 include/nuttx/sched.h        |  4 +---
 libs/libc/unistd/lib_vfork.c |  6 ++----
 sched/sched/sched_waitpid.c  | 16 ++++++----------
 3 files changed, 9 insertions(+), 17 deletions(-)

diff --git a/include/nuttx/sched.h b/include/nuttx/sched.h
index aaaecc4a01..47f2549ea2 100644
--- a/include/nuttx/sched.h
+++ b/include/nuttx/sched.h
@@ -1457,7 +1457,6 @@ void nxsched_get_stateinfo(FAR struct tcb_s *tcb, FAR char *state,
  *   pid - The task ID of the thread to waid for
  *   stat_loc - The location to return the exit status
  *   options - ignored
- *   release - Wheather release exited child process infomation
  *
  * Returned Value:
  *   If nxsched_waitpid() returns because the status of a child process is
@@ -1486,8 +1485,7 @@ void nxsched_get_stateinfo(FAR struct tcb_s *tcb, FAR char *state,
  ****************************************************************************/
 
 #ifdef CONFIG_SCHED_WAITPID
-pid_t nxsched_waitpid(pid_t pid, FAR int *stat_loc, int options,
-                      bool release);
+pid_t nxsched_waitpid(pid_t pid, FAR int *stat_loc, int options);
 #endif
 
 /****************************************************************************
diff --git a/libs/libc/unistd/lib_vfork.c b/libs/libc/unistd/lib_vfork.c
index 15c21fdd8c..e23014d26c 100644
--- a/libs/libc/unistd/lib_vfork.c
+++ b/libs/libc/unistd/lib_vfork.c
@@ -23,7 +23,6 @@
  ****************************************************************************/
 
 #include <nuttx/config.h>
-#include <nuttx/sched.h>
 
 #include <unistd.h>
 #include <sys/wait.h>
@@ -64,11 +63,10 @@ pid_t vfork(void)
        * until running finished or performing exec
        */
 
-      ret = nxsched_waitpid(pid, &status, 0, false);
+      ret = waitpid(pid, &status, 0);
       if (ret < 0)
         {
-          set_errno(-ret);
-          serr("ERROR: waitpid failed: %d\n", -ret);
+          serr("ERROR: waitpid failed: %d\n", get_errno());
         }
     }
 
diff --git a/sched/sched/sched_waitpid.c b/sched/sched/sched_waitpid.c
index 069808f4e1..ef535a62a8 100644
--- a/sched/sched/sched_waitpid.c
+++ b/sched/sched/sched_waitpid.c
@@ -62,7 +62,6 @@
  *   pid - The task ID of the thread to waid for
  *   stat_loc - The location to return the exit status
  *   options - ignored
- *   release - Wheather release exited child process infomation
  *
  * Returned Value:
  *   If nxsched_waitpid() returns because the status of a child process is
@@ -91,7 +90,7 @@
  ****************************************************************************/
 
 #ifndef CONFIG_SCHED_HAVE_PARENT
-pid_t nxsched_waitpid(pid_t pid, int *stat_loc, int options, bool release)
+pid_t nxsched_waitpid(pid_t pid, int *stat_loc, int options)
 {
   FAR struct tcb_s *ctcb;
   FAR struct task_group_s *group;
@@ -222,7 +221,7 @@ errout:
  ****************************************************************************/
 
 #else
-pid_t nxsched_waitpid(pid_t pid, int *stat_loc, int options, bool release)
+pid_t nxsched_waitpid(pid_t pid, int *stat_loc, int options)
 {
   FAR struct tcb_s *rtcb = this_task();
   FAR struct tcb_s *ctcb;
@@ -389,11 +388,8 @@ pid_t nxsched_waitpid(pid_t pid, int *stat_loc, int options, bool release)
 
               /* Discard the child entry and break out of the loop */
 
-              if (release)
-                {
-                  group_remove_child(rtcb->group, pid);
-                  group_free_child(child);
-                }
+              group_remove_child(rtcb->group, pid);
+              group_free_child(child);
               break;
             }
         }
@@ -479,7 +475,7 @@ pid_t nxsched_waitpid(pid_t pid, int *stat_loc, int options, bool release)
 
               /* Discard the child entry, if we have one */
 
-              if (child != NULL && release)
+              if (child != NULL)
                 {
                   group_remove_child(rtcb->group, child->ch_pid);
                   group_free_child(child);
@@ -640,7 +636,7 @@ pid_t waitpid(pid_t pid, int *stat_loc, int options)
 
   /* Let nxsched_waitpid() do the work. */
 
-  ret = nxsched_waitpid(pid, stat_loc, options, true);
+  ret = nxsched_waitpid(pid, stat_loc, options);
   if (ret < 0)
     {
       set_errno(-ret);