mirror of
https://github.com/apache/nuttx.git
synced 2026-06-01 07:45:16 +08:00
sched: remove the unused function nx_wait and nx_waitid
This partially reverts commit de2a9d8a77.
This commit is contained in:
committed by
Petro Karashchenko
parent
579e47347e
commit
5bee68ebac
@@ -1374,8 +1374,6 @@ int nxsched_get_stackinfo(pid_t pid, FAR struct stackinfo_s *stackinfo);
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifdef CONFIG_SCHED_WAITPID
|
#ifdef CONFIG_SCHED_WAITPID
|
||||||
pid_t nx_wait(FAR int *stat_loc);
|
|
||||||
int nx_waitid(int idtype, id_t id, FAR siginfo_t *info, int options);
|
|
||||||
pid_t nx_waitpid(pid_t pid, FAR int *stat_loc, int options);
|
pid_t nx_waitpid(pid_t pid, FAR int *stat_loc, int options);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -38,15 +38,6 @@
|
|||||||
* Public Functions
|
* Public Functions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Name: nx_wait
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
pid_t nx_wait(FAR int *stat_loc)
|
|
||||||
{
|
|
||||||
return nx_waitpid(INVALID_PROCESS_ID, stat_loc, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: wait
|
* Name: wait
|
||||||
*
|
*
|
||||||
|
|||||||
+92
-97
@@ -82,10 +82,69 @@ static void exited_child(FAR struct tcb_s *rtcb,
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: nx_waitid
|
* Name: waitid
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* The waitid() function suspends the calling thread until one child of
|
||||||
|
* the process containing the calling thread changes state. It records the
|
||||||
|
* current state of a child in the structure pointed to by 'info'. If a
|
||||||
|
* child process changed state prior to the call to waitid(), waitid()
|
||||||
|
* returns immediately. If more than one thread is suspended in wait() or
|
||||||
|
* waitpid() waiting termination of the same process, exactly one thread
|
||||||
|
* will return the process status at the time of the target process
|
||||||
|
* termination
|
||||||
|
*
|
||||||
|
* The idtype and id arguments are used to specify which children waitid()
|
||||||
|
* will wait for.
|
||||||
|
*
|
||||||
|
* If idtype is P_PID, waitid() will wait for the child with a process
|
||||||
|
* ID equal to (pid_t)id.
|
||||||
|
*
|
||||||
|
* If idtype is P_PGID, waitid() will wait for any child with a process
|
||||||
|
* group ID equal to (pid_t)id.
|
||||||
|
*
|
||||||
|
* If idtype is P_ALL, waitid() will wait for any children and id is
|
||||||
|
* ignored.
|
||||||
|
*
|
||||||
|
* The options argument is used to specify which state changes waitid()
|
||||||
|
* will will wait for. It is formed by OR-ing together one or more of the
|
||||||
|
* following flags:
|
||||||
|
*
|
||||||
|
* WEXITED - Wait for processes that have exited.
|
||||||
|
* WSTOPPED - Status will be returned for any child that has stopped
|
||||||
|
* upon receipt of a signal.
|
||||||
|
* WCONTINUED - Status will be returned for any child that was stopped
|
||||||
|
* and has been continued.
|
||||||
|
* WNOHANG - Return immediately if there are no children to wait for.
|
||||||
|
* WNOWAIT - Keep the process whose status is returned in 'info' in a
|
||||||
|
* waitable state. This will not affect the state of the process; the
|
||||||
|
* process may be waited for again after this call completes.
|
||||||
|
*
|
||||||
|
* The 'info' argument must point to a siginfo_t structure. If waitid()
|
||||||
|
* returns because a child process was found that satisfied the conditions
|
||||||
|
* indicated by the arguments idtype and options, then the structure
|
||||||
|
* pointed to by 'info' will be filled in by the system with the status of
|
||||||
|
* the process. The si_signo member will always be equal to SIGCHLD.
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* See description.
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* If waitid() returns due to the change of state of one of its children,
|
||||||
|
* 0 is returned. Otherwise, -1 is returned and errno is set to indicate
|
||||||
|
* the error.
|
||||||
|
*
|
||||||
|
* The waitid() function will fail if:
|
||||||
|
*
|
||||||
|
* ECHILD - The calling process has no existing unwaited-for child
|
||||||
|
* processes.
|
||||||
|
* EINTR - The waitid() function was interrupted by a signal.
|
||||||
|
* EINVAL - An invalid value was specified for options, or idtype and id
|
||||||
|
* specify an invalid set of processes.
|
||||||
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
int nx_waitid(int idtype, id_t id, FAR siginfo_t *info, int options)
|
int waitid(idtype_t idtype, id_t id, FAR siginfo_t *info, int options)
|
||||||
{
|
{
|
||||||
FAR struct tcb_s *rtcb = this_task();
|
FAR struct tcb_s *rtcb = this_task();
|
||||||
FAR struct tcb_s *ctcb;
|
FAR struct tcb_s *ctcb;
|
||||||
@@ -94,7 +153,8 @@ int nx_waitid(int idtype, id_t id, FAR siginfo_t *info, int options)
|
|||||||
bool retains;
|
bool retains;
|
||||||
#endif
|
#endif
|
||||||
sigset_t set;
|
sigset_t set;
|
||||||
int ret = OK;
|
int errcode;
|
||||||
|
int ret;
|
||||||
|
|
||||||
/* MISSING LOGIC: If WNOHANG is provided in the options, then this
|
/* MISSING LOGIC: If WNOHANG is provided in the options, then this
|
||||||
* function should returned immediately. However, there is no mechanism
|
* function should returned immediately. However, there is no mechanism
|
||||||
@@ -108,7 +168,8 @@ int nx_waitid(int idtype, id_t id, FAR siginfo_t *info, int options)
|
|||||||
|
|
||||||
if (idtype != P_PID && idtype != P_ALL)
|
if (idtype != P_PID && idtype != P_ALL)
|
||||||
{
|
{
|
||||||
return -ENOSYS;
|
set_errno(ENOSYS);
|
||||||
|
return ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* None of the options are supported except for WEXITED (which must be
|
/* None of the options are supported except for WEXITED (which must be
|
||||||
@@ -118,15 +179,21 @@ int nx_waitid(int idtype, id_t id, FAR siginfo_t *info, int options)
|
|||||||
|
|
||||||
if ((options & WEXITED) == 0)
|
if ((options & WEXITED) == 0)
|
||||||
{
|
{
|
||||||
return -ENOSYS;
|
set_errno(ENOSYS);
|
||||||
|
return ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((options & ~(WEXITED | WNOHANG)) != 0)
|
if ((options & ~(WEXITED | WNOHANG)) != 0)
|
||||||
{
|
{
|
||||||
return -ENOSYS;
|
set_errno(ENOSYS);
|
||||||
|
return ERROR;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* waitid() is a cancellation point */
|
||||||
|
|
||||||
|
enter_cancellation_point();
|
||||||
|
|
||||||
/* Create a signal set that contains only SIGCHLD */
|
/* Create a signal set that contains only SIGCHLD */
|
||||||
|
|
||||||
sigemptyset(&set);
|
sigemptyset(&set);
|
||||||
@@ -157,7 +224,7 @@ int nx_waitid(int idtype, id_t id, FAR siginfo_t *info, int options)
|
|||||||
{
|
{
|
||||||
/* There are no children */
|
/* There are no children */
|
||||||
|
|
||||||
ret = -ECHILD;
|
errcode = ECHILD;
|
||||||
goto errout;
|
goto errout;
|
||||||
}
|
}
|
||||||
else if (idtype == P_PID)
|
else if (idtype == P_PID)
|
||||||
@@ -173,7 +240,7 @@ int nx_waitid(int idtype, id_t id, FAR siginfo_t *info, int options)
|
|||||||
|
|
||||||
if (ctcb->group->tg_ppid != rtcb->pid)
|
if (ctcb->group->tg_ppid != rtcb->pid)
|
||||||
{
|
{
|
||||||
ret = -ECHILD;
|
errcode = ECHILD;
|
||||||
goto errout;
|
goto errout;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -188,7 +255,7 @@ int nx_waitid(int idtype, id_t id, FAR siginfo_t *info, int options)
|
|||||||
{
|
{
|
||||||
/* This specific pid is not a child */
|
/* This specific pid is not a child */
|
||||||
|
|
||||||
ret = -ECHILD;
|
errcode = ECHILD;
|
||||||
goto errout;
|
goto errout;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -200,7 +267,7 @@ int nx_waitid(int idtype, id_t id, FAR siginfo_t *info, int options)
|
|||||||
{
|
{
|
||||||
/* There are no children */
|
/* There are no children */
|
||||||
|
|
||||||
ret = -ECHILD;
|
errcode = ECHILD;
|
||||||
goto errout;
|
goto errout;
|
||||||
}
|
}
|
||||||
else if (idtype == P_PID)
|
else if (idtype == P_PID)
|
||||||
@@ -213,7 +280,7 @@ int nx_waitid(int idtype, id_t id, FAR siginfo_t *info, int options)
|
|||||||
|
|
||||||
if (!ctcb || !ctcb->group || ctcb->group->tg_ppid != rtcb->pid)
|
if (!ctcb || !ctcb->group || ctcb->group->tg_ppid != rtcb->pid)
|
||||||
{
|
{
|
||||||
ret = -ECHILD;
|
errcode = ECHILD;
|
||||||
goto errout;
|
goto errout;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -285,7 +352,7 @@ int nx_waitid(int idtype, id_t id, FAR siginfo_t *info, int options)
|
|||||||
* to reported ECHILD than bogus status.
|
* to reported ECHILD than bogus status.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ret = -ECHILD;
|
errcode = ECHILD;
|
||||||
goto errout;
|
goto errout;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -304,7 +371,7 @@ int nx_waitid(int idtype, id_t id, FAR siginfo_t *info, int options)
|
|||||||
* Let's return ECHILD.. that is at least informative.
|
* Let's return ECHILD.. that is at least informative.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ret = -ECHILD;
|
errcode = ECHILD;
|
||||||
goto errout;
|
goto errout;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -330,6 +397,7 @@ int nx_waitid(int idtype, id_t id, FAR siginfo_t *info, int options)
|
|||||||
ret = nxsig_waitinfo(&set, info);
|
ret = nxsig_waitinfo(&set, info);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
|
errcode = -ret;
|
||||||
goto errout;
|
goto errout;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -390,102 +458,29 @@ int nx_waitid(int idtype, id_t id, FAR siginfo_t *info, int options)
|
|||||||
|
|
||||||
else /* if (idtype == P_PGID) */
|
else /* if (idtype == P_PGID) */
|
||||||
{
|
{
|
||||||
ret = -ENOSYS;
|
errcode = ENOSYS;
|
||||||
goto errout;
|
goto errout;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
leave_critical_section(flags);
|
||||||
|
#else
|
||||||
|
sched_unlock();
|
||||||
|
#endif
|
||||||
|
leave_cancellation_point();
|
||||||
|
return OK;
|
||||||
|
|
||||||
errout:
|
errout:
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
leave_critical_section(flags);
|
leave_critical_section(flags);
|
||||||
#else
|
#else
|
||||||
sched_unlock();
|
sched_unlock();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Name: waitid
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* The waitid() function suspends the calling thread until one child of
|
|
||||||
* the process containing the calling thread changes state. It records the
|
|
||||||
* current state of a child in the structure pointed to by 'info'. If a
|
|
||||||
* child process changed state prior to the call to waitid(), waitid()
|
|
||||||
* returns immediately. If more than one thread is suspended in wait() or
|
|
||||||
* waitpid() waiting termination of the same process, exactly one thread
|
|
||||||
* will return the process status at the time of the target process
|
|
||||||
* termination
|
|
||||||
*
|
|
||||||
* The idtype and id arguments are used to specify which children waitid()
|
|
||||||
* will wait for.
|
|
||||||
*
|
|
||||||
* If idtype is P_PID, waitid() will wait for the child with a process
|
|
||||||
* ID equal to (pid_t)id.
|
|
||||||
*
|
|
||||||
* If idtype is P_PGID, waitid() will wait for any child with a process
|
|
||||||
* group ID equal to (pid_t)id.
|
|
||||||
*
|
|
||||||
* If idtype is P_ALL, waitid() will wait for any children and id is
|
|
||||||
* ignored.
|
|
||||||
*
|
|
||||||
* The options argument is used to specify which state changes waitid()
|
|
||||||
* will will wait for. It is formed by OR-ing together one or more of the
|
|
||||||
* following flags:
|
|
||||||
*
|
|
||||||
* WEXITED - Wait for processes that have exited.
|
|
||||||
* WSTOPPED - Status will be returned for any child that has stopped
|
|
||||||
* upon receipt of a signal.
|
|
||||||
* WCONTINUED - Status will be returned for any child that was stopped
|
|
||||||
* and has been continued.
|
|
||||||
* WNOHANG - Return immediately if there are no children to wait for.
|
|
||||||
* WNOWAIT - Keep the process whose status is returned in 'info' in a
|
|
||||||
* waitable state. This will not affect the state of the process; the
|
|
||||||
* process may be waited for again after this call completes.
|
|
||||||
*
|
|
||||||
* The 'info' argument must point to a siginfo_t structure. If waitid()
|
|
||||||
* returns because a child process was found that satisfied the conditions
|
|
||||||
* indicated by the arguments idtype and options, then the structure
|
|
||||||
* pointed to by 'info' will be filled in by the system with the status of
|
|
||||||
* the process. The si_signo member will always be equal to SIGCHLD.
|
|
||||||
*
|
|
||||||
* Input Parameters:
|
|
||||||
* See description.
|
|
||||||
*
|
|
||||||
* Returned Value:
|
|
||||||
* If waitid() returns due to the change of state of one of its children,
|
|
||||||
* 0 is returned. Otherwise, -1 is returned and errno is set to indicate
|
|
||||||
* the error.
|
|
||||||
*
|
|
||||||
* The waitid() function will fail if:
|
|
||||||
*
|
|
||||||
* ECHILD - The calling process has no existing unwaited-for child
|
|
||||||
* processes.
|
|
||||||
* EINTR - The waitid() function was interrupted by a signal.
|
|
||||||
* EINVAL - An invalid value was specified for options, or idtype and id
|
|
||||||
* specify an invalid set of processes.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
int waitid(idtype_t idtype, id_t id, FAR siginfo_t *info, int options)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
/* waitid() is a cancellation point */
|
|
||||||
|
|
||||||
enter_cancellation_point();
|
|
||||||
|
|
||||||
ret = nx_waitid(idtype, id, info, options);
|
|
||||||
if (ret < 0)
|
|
||||||
{
|
|
||||||
set_errno(-ret);
|
|
||||||
ret = ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
leave_cancellation_point();
|
leave_cancellation_point();
|
||||||
return ret;
|
set_errno(errcode);
|
||||||
|
return ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_SCHED_WAITPID && CONFIG_SCHED_HAVE_PARENT */
|
#endif /* CONFIG_SCHED_WAITPID && CONFIG_SCHED_HAVE_PARENT */
|
||||||
|
|||||||
Reference in New Issue
Block a user