Formerly mach/hurd/__kill.c.~3~
authorroland <roland>
Sat, 1 Feb 1992 19:48:45 +0000 (19:48 +0000)
committerroland <roland>
Sat, 1 Feb 1992 19:48:45 +0000 (19:48 +0000)
sysdeps/mach/hurd/kill.c

index e3e0c0e..e603ad7 100644 (file)
@@ -27,7 +27,36 @@ Cambridge, MA 02139, USA.  */
 int
 DEFUN(__kill, (pid, sig), int pid AND int sig)
 {
-  error_t err = __proc_kill (_hurd_proc, pid, sig);
+  /* XXXXXXXXXXXXXXXXXXXXXXXXXXX */
+  error_t err;
+
+  __mutex_lock (&_hurd_lock);
+
+  if (pid == 0)
+    pid = - _hurd_pgrp;
+
+  if (pid < 0)
+    {
+      /* Send SIG to each process in pgrp (- PID).  */
+      proccoll_t pcoll;
+      err = __proc_pgrp_pcoll (_hurd_proc, - pid, &pcoll);
+      if (!err)
+       {
+         err = __proc_get_collports (_hurd_proc, pcoll, &ports, &nports);
+         __mach_port_deallocate (__mach_task_self (), pcoll);
+       }
+    }
+  else
+    {
+      err = __proc_pid2task (_hurd_proc, pid, &refport);
+      if (err)
+       err = __proc_getsidport (_hurd_proc, &refport);
+      if (!err)
+       err = __proc_kill (_hurd_proc, pid, sig);
+      if (refport != MACH_PORT_NULL)
+       __mach_port_deallocate (__mach_task_self (), refport);
+      __mutex_unlock (&_hurd_lock);
+    }
 
   if (err)
     return __hurd_fail (err);