diff options
author | Roland McGrath <roland@gnu.org> | 1996-01-04 01:23:21 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 1996-01-04 01:23:21 +0000 |
commit | 67f27f3a02d623331a56cddee2a56c34b3b13bd9 (patch) | |
tree | 973679146bef0021c00936ec25c43bb7165f357a /hurd/hurdkill.c | |
parent | 9418ccede9a13454725442ab7f3cf47b3302bf6f (diff) | |
download | glibc-67f27f3a02d623331a56cddee2a56c34b3b13bd9.zip glibc-67f27f3a02d623331a56cddee2a56c34b3b13bd9.tar.gz glibc-67f27f3a02d623331a56cddee2a56c34b3b13bd9.tar.bz2 |
(_hurd_sig_post): When doing pgrp, make sure we do ourselves last.
Diffstat (limited to 'hurd/hurdkill.c')
-rw-r--r-- | hurd/hurdkill.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/hurd/hurdkill.c b/hurd/hurdkill.c index 364b6ed..a8f101d 100644 --- a/hurd/hurdkill.c +++ b/hurd/hurdkill.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. +/* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -58,16 +58,25 @@ _hurd_sig_post (pid_t pid, int sig, mach_port_t arg_refport) err = __proc_getpgrppids (proc, - pid, &pids, &npids); if (!err) { + int self = 0; for (i = 0; i < npids; ++i) - { - kill_pid (pids[i]); - if (err == ESRCH) - /* The process died already. Ignore it. */ - err = 0; - } + if (pids[i] == _hurd_pid) + /* We must do ourselves last so we are not suspended + and fail to suspend the other processes in the pgrp. */ + self = 1; + else + { + kill_pid (pids[i]); + if (err == ESRCH) + /* The process died already. Ignore it. */ + err = 0; + } if (pids != pidsbuf) __vm_deallocate (__mach_task_self (), (vm_address_t) pids, npids * sizeof (pids[0])); + + if (self) + kill_pid (_hurd_pid); } } else |