Attempt to handle systems with SA_SIGINFO but that lack SI_USER.
This commit is contained in:
@@ -870,7 +870,7 @@ handler(int s, siginfo_t *info, void *context)
|
|||||||
* kill itself. For example, this can happen with some versions of
|
* kill itself. For example, this can happen with some versions of
|
||||||
* reboot that call kill(-1, SIGTERM) to kill all other processes.
|
* reboot that call kill(-1, SIGTERM) to kill all other processes.
|
||||||
*/
|
*/
|
||||||
if (info != NULL && info->si_code == SI_USER) {
|
if (USER_SIGNALED(info)) {
|
||||||
pid_t si_pgrp = getpgid(info->si_pid);
|
pid_t si_pgrp = getpgid(info->si_pid);
|
||||||
if (si_pgrp != (pid_t)-1) {
|
if (si_pgrp != (pid_t)-1) {
|
||||||
if (si_pgrp == ppgrp || si_pgrp == cmnd_pid)
|
if (si_pgrp == ppgrp || si_pgrp == cmnd_pid)
|
||||||
@@ -926,7 +926,7 @@ handler_user_only(int s, siginfo_t *info, void *context)
|
|||||||
* often trap ^Z and send SIGTSTP to their own pgrp, so we don't
|
* often trap ^Z and send SIGTSTP to their own pgrp, so we don't
|
||||||
* want to send an extra SIGTSTP.
|
* want to send an extra SIGTSTP.
|
||||||
*/
|
*/
|
||||||
if (info == NULL || info->si_code != SI_USER)
|
if (!USER_SIGNALED(info))
|
||||||
return;
|
return;
|
||||||
if ((si_pgrp = getpgid(info->si_pid)) != (pid_t)-1) {
|
if ((si_pgrp = getpgid(info->si_pid)) != (pid_t)-1) {
|
||||||
if (si_pgrp == ppgrp || si_pgrp == cmnd_pid)
|
if (si_pgrp == ppgrp || si_pgrp == cmnd_pid)
|
||||||
|
@@ -141,7 +141,7 @@ mon_handler(int s, siginfo_t *info, void *context)
|
|||||||
* itself. This can happen with, e.g., BSD-derived versions of
|
* itself. This can happen with, e.g., BSD-derived versions of
|
||||||
* reboot that call kill(-1, SIGTERM) to kill all other processes.
|
* reboot that call kill(-1, SIGTERM) to kill all other processes.
|
||||||
*/
|
*/
|
||||||
if (info != NULL && info->si_code == SI_USER) {
|
if (USER_SIGNALED(info)) {
|
||||||
pid_t si_pgrp = getpgid(info->si_pid);
|
pid_t si_pgrp = getpgid(info->si_pid);
|
||||||
if (si_pgrp != (pid_t)-1) {
|
if (si_pgrp != (pid_t)-1) {
|
||||||
if (si_pgrp == cmnd_pgrp)
|
if (si_pgrp == cmnd_pgrp)
|
||||||
|
@@ -24,6 +24,17 @@
|
|||||||
# define MSG_WAITALL 0
|
# define MSG_WAITALL 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Some older systems support siginfo but predate SI_USER.
|
||||||
|
*/
|
||||||
|
#ifdef SA_SIGINFO
|
||||||
|
# ifdef SI_USER
|
||||||
|
# define USER_SIGNALED(_info) ((_info) != NULL && (_info)->si_code == SI_USER)
|
||||||
|
# else
|
||||||
|
# define USER_SIGNALED(_info) ((_info) != NULL && (_info)->si_code <= 0)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Special values to indicate whether continuing in foreground or background.
|
* Special values to indicate whether continuing in foreground or background.
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user