bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 05/14] proc: turn reap into a normal function


From: Justus Winter
Subject: [PATCH 05/14] proc: turn reap into a normal function
Date: Fri, 8 Nov 2013 21:24:13 +0100

Previously reap was a nested function defined inside of S_proc_wait.

* proc/wait.c: Turn reap into a normal function.
---
 proc/wait.c |   45 ++++++++++++++++++++++++++-------------------
 1 file changed, 26 insertions(+), 19 deletions(-)

diff --git a/proc/wait.c b/proc/wait.c
index 824e667..f70dfe9 100644
--- a/proc/wait.c
+++ b/proc/wait.c
@@ -159,6 +159,30 @@ alert_parent (struct proc *p)
     }
 }
 
+static int
+reap (struct proc *child,
+      int options,
+      int *status,
+      int *sigcode,
+      struct rusage *ru,
+      pid_t *pid_status)
+{
+  if (child->p_waited
+      || (!child->p_dead
+         && (!child->p_stopped
+             || !(child->p_traced || (options & WUNTRACED)))))
+    return 0;
+  child->p_waited = 1;
+  *status = child->p_status;
+  *sigcode = child->p_sigcode;
+  *ru = child->p_rusage; /* all zeros if !p_dead */
+  *pid_status = child->p_pid;
+  if (child->p_dead)
+    complete_exit (child);
+  return 1;
+}
+
+
 kern_return_t
 S_proc_wait (struct proc *p,
             mach_port_t reply_port,
@@ -172,23 +196,6 @@ S_proc_wait (struct proc *p,
 {
   int cancel;
 
-  int reap (struct proc *child)
-    {
-      if (child->p_waited
-         || (!child->p_dead
-             && (!child->p_stopped
-                 || !(child->p_traced || (options & WUNTRACED)))))
-       return 0;
-      child->p_waited = 1;
-      *status = child->p_status;
-      *sigcode = child->p_sigcode;
-      *ru = child->p_rusage; /* all zeros if !p_dead */
-      *pid_status = child->p_pid;
-      if (child->p_dead)
-       complete_exit (child);
-      return 1;
-    }
-
   if (!p)
     return EOPNOTSUPP;
 
@@ -203,7 +210,7 @@ S_proc_wait (struct proc *p,
       struct proc *child = pid_find_allow_zombie (pid);
       if (!child || child->p_parent != p)
        return ECHILD;
-      if (reap (child))
+      if (reap (child, options, status, sigcode, ru, pid_status))
        return 0;
     }
   else
@@ -215,7 +222,7 @@ S_proc_wait (struct proc *p,
        if (waiter_cares (pid, p->p_pgrp->pg_pgid,
                          child->p_pid, child->p_pgrp->pg_pgid))
          {
-           if (reap (child))
+           if (reap (child, options, status, sigcode, ru, pid_status))
              return 0;
            had_a_match = 1;
          }
-- 
1.7.10.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]