perform indention change left out of previous commit

This commit is contained in:
cl 2003-11-02 16:30:55 +00:00
parent 350dd95eff
commit 763d8350f0
1 changed files with 117 additions and 120 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: kern_sig.c,v 1.175 2003/11/02 16:26:10 cl Exp $ */
/* $NetBSD: kern_sig.c,v 1.176 2003/11/02 16:30:55 cl Exp $ */
/*
* Copyright (c) 1982, 1986, 1989, 1991, 1993
@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: kern_sig.c,v 1.175 2003/11/02 16:26:10 cl Exp $");
__KERNEL_RCSID(0, "$NetBSD: kern_sig.c,v 1.176 2003/11/02 16:30:55 cl Exp $");
#include "opt_ktrace.h"
#include "opt_compat_sunos.h"
@ -1163,135 +1163,132 @@ kpsignal2(struct proc *p, const ksiginfo_t *ksi, int dolock)
}
}
{ /* XXXcl wrong indent to keep diff small */
if (p->p_stat == SACTIVE) {
if (p->p_stat == SACTIVE) {
if (l != NULL && (p->p_flag & P_TRACED))
goto run;
if (l != NULL && (p->p_flag & P_TRACED))
goto run;
/*
* If SIGCONT is default (or ignored) and process is
* asleep, we are finished; the process should not
* be awakened.
*/
if ((prop & SA_CONT) && action == SIG_DFL) {
sigdelset(&p->p_sigctx.ps_siglist, signum);
goto done;
}
/*
* If SIGCONT is default (or ignored) and process is
* asleep, we are finished; the process should not
* be awakened.
*/
if ((prop & SA_CONT) && action == SIG_DFL) {
sigdelset(&p->p_sigctx.ps_siglist, signum);
goto done;
}
/*
* When a sleeping process receives a stop
* signal, process immediately if possible.
*/
if ((prop & SA_STOP) && action == SIG_DFL) {
/*
* When a sleeping process receives a stop
* signal, process immediately if possible.
* If a child holding parent blocked,
* stopping could cause deadlock.
*/
if ((prop & SA_STOP) && action == SIG_DFL) {
/*
* If a child holding parent blocked,
* stopping could cause deadlock.
*/
if (p->p_flag & P_PPWAIT) {
goto out;
}
sigdelset(&p->p_sigctx.ps_siglist, signum);
p->p_xstat = signum;
if ((p->p_pptr->p_flag & P_NOCLDSTOP) == 0) {
/*
* XXXSMP: recursive call; don't lock
* the second time around.
*/
child_psignal(p, 0);
}
proc_stop(p); /* XXXSMP: recurse? */
goto done;
}
if (l == NULL) {
/*
* Special case: SIGKILL of a process
* which is entirely composed of
* suspended LWPs should succeed. We
* make this happen by unsuspending one of
* them.
*/
if (allsusp && (signum == SIGKILL))
lwp_continue(suspended);
goto done;
}
/*
* All other (caught or default) signals
* cause the process to run.
*/
goto runfast;
/*NOTREACHED*/
} else if (p->p_stat == SSTOP) {
/* Process is stopped */
/*
* If traced process is already stopped,
* then no further action is necessary.
*/
if (p->p_flag & P_TRACED)
goto done;
/*
* Kill signal always sets processes running,
* if possible.
*/
if (signum == SIGKILL) {
l = proc_unstop(p);
if (l)
goto runfast;
goto done;
}
if (prop & SA_CONT) {
/*
* If SIGCONT is default (or ignored),
* we continue the process but don't
* leave the signal in ps_siglist, as
* it has no further action. If
* SIGCONT is held, we continue the
* process and leave the signal in
* ps_siglist. If the process catches
* SIGCONT, let it handle the signal
* itself. If it isn't waiting on an
* event, then it goes back to run
* state. Otherwise, process goes
* back to sleep state.
*/
if (action == SIG_DFL)
sigdelset(&p->p_sigctx.ps_siglist,
signum);
l = proc_unstop(p);
if (l && (action == SIG_CATCH))
goto runfast;
if (p->p_flag & P_PPWAIT) {
goto out;
}
if (prop & SA_STOP) {
sigdelset(&p->p_sigctx.ps_siglist, signum);
p->p_xstat = signum;
if ((p->p_pptr->p_flag & P_NOCLDSTOP) == 0) {
/*
* Already stopped, don't need to stop again.
* (If we did the shell could get confused.)
* XXXSMP: recursive call; don't lock
* the second time around.
*/
sigdelset(&p->p_sigctx.ps_siglist, signum);
goto done;
child_psignal(p, 0);
}
/*
* If a lwp is sleeping interruptibly, then
* wake it up; it will run until the kernel
* boundary, where it will stop in issignal(),
* since p->p_stat is still SSTOP. When the
* process is continued, it will be made
* runnable and can look at the signal.
*/
if (l)
goto run;
goto out;
} else {
/* Else what? */
panic("psignal: Invalid process state %d.",
p->p_stat);
proc_stop(p); /* XXXSMP: recurse? */
goto done;
}
} /* XXXcl change indent after commit */
if (l == NULL) {
/*
* Special case: SIGKILL of a process
* which is entirely composed of
* suspended LWPs should succeed. We
* make this happen by unsuspending one of
* them.
*/
if (allsusp && (signum == SIGKILL))
lwp_continue(suspended);
goto done;
}
/*
* All other (caught or default) signals
* cause the process to run.
*/
goto runfast;
/*NOTREACHED*/
} else if (p->p_stat == SSTOP) {
/* Process is stopped */
/*
* If traced process is already stopped,
* then no further action is necessary.
*/
if (p->p_flag & P_TRACED)
goto done;
/*
* Kill signal always sets processes running,
* if possible.
*/
if (signum == SIGKILL) {
l = proc_unstop(p);
if (l)
goto runfast;
goto done;
}
if (prop & SA_CONT) {
/*
* If SIGCONT is default (or ignored),
* we continue the process but don't
* leave the signal in ps_siglist, as
* it has no further action. If
* SIGCONT is held, we continue the
* process and leave the signal in
* ps_siglist. If the process catches
* SIGCONT, let it handle the signal
* itself. If it isn't waiting on an
* event, then it goes back to run
* state. Otherwise, process goes
* back to sleep state.
*/
if (action == SIG_DFL)
sigdelset(&p->p_sigctx.ps_siglist,
signum);
l = proc_unstop(p);
if (l && (action == SIG_CATCH))
goto runfast;
goto out;
}
if (prop & SA_STOP) {
/*
* Already stopped, don't need to stop again.
* (If we did the shell could get confused.)
*/
sigdelset(&p->p_sigctx.ps_siglist, signum);
goto done;
}
/*
* If a lwp is sleeping interruptibly, then
* wake it up; it will run until the kernel
* boundary, where it will stop in issignal(),
* since p->p_stat is still SSTOP. When the
* process is continued, it will be made
* runnable and can look at the signal.
*/
if (l)
goto run;
goto out;
} else {
/* Else what? */
panic("psignal: Invalid process state %d.", p->p_stat);
}
/*NOTREACHED*/
runfast: