diff options
Diffstat (limited to 'sys/i386/isa')
-rw-r--r-- | sys/i386/isa/npx.c | 2 | ||||
-rw-r--r-- | sys/i386/isa/pcvt/pcvt_ext.c | 25 | ||||
-rw-r--r-- | sys/i386/isa/spigot.c | 5 |
3 files changed, 26 insertions, 6 deletions
diff --git a/sys/i386/isa/npx.c b/sys/i386/isa/npx.c index 0dab6ae..87d274b 100644 --- a/sys/i386/isa/npx.c +++ b/sys/i386/isa/npx.c @@ -781,7 +781,9 @@ npx_intr(dummy) * * Treat them like a true async interrupt. */ + PROC_LOCK(curproc); psignal(curproc, SIGFPE); + PROC_UNLOCK(curproc); } mtx_unlock(&Giant); } diff --git a/sys/i386/isa/pcvt/pcvt_ext.c b/sys/i386/isa/pcvt/pcvt_ext.c index 50ded4e..3f0e954 100644 --- a/sys/i386/isa/pcvt/pcvt_ext.c +++ b/sys/i386/isa/pcvt/pcvt_ext.c @@ -2294,11 +2294,17 @@ vgapage(int new_screen) /* Try resignaling uncooperative X-window servers */ if (vsp->smode.mode == VT_PROCESS) { if (vsp->vt_status & VT_WAIT_REL) { - if(vsp->smode.relsig) + if(vsp->smode.relsig) { + PROC_LOCK(vsp->proc); psignal(vsp->proc, vsp->smode.relsig); + PROC_UNLOCK(vsp->proc); + } } else if (vsp->vt_status & VT_WAIT_ACK) { - if(vsp->smode.acqsig) + if(vsp->smode.acqsig) { + PROC_LOCK(vsp->proc); psignal(vsp->proc, vsp->smode.acqsig); + PROC_UNLOCK(vsp->proc); + } } } return EAGAIN; @@ -2310,8 +2316,11 @@ vgapage(int new_screen) { /* we cannot switch immediately here */ vsp->vt_status |= VT_WAIT_REL; - if(vsp->smode.relsig) + if(vsp->smode.relsig) { + PROC_LOCK(vsp->proc); psignal(vsp->proc, vsp->smode.relsig); + PROC_UNLOCK(vsp->proc); + } } else { @@ -2341,8 +2350,11 @@ vgapage(int new_screen) { /* if _new_ vt is under process control... */ vsp->vt_status |= VT_WAIT_ACK; - if(vsp->smode.acqsig) + if(vsp->smode.acqsig) { + PROC_LOCK(vsp->proc); psignal(vsp->proc, vsp->smode.acqsig); + PROC_UNLOCK(vsp->proc); + } } else { @@ -2502,9 +2514,12 @@ usl_vt_ioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p) */ vsp->vt_status |= VT_WAIT_ACK; - if(vsp->smode.acqsig) + if(vsp->smode.acqsig) { + PROC_LOCK(vsp->proc); psignal(vsp->proc, vsp->smode.acqsig); + PROC_UNLOCK(vsp->proc); + } } else { diff --git a/sys/i386/isa/spigot.c b/sys/i386/isa/spigot.c index 4c638d5..96272df 100644 --- a/sys/i386/isa/spigot.c +++ b/sys/i386/isa/spigot.c @@ -266,8 +266,11 @@ spigintr(int unit) { struct spigot_softc *ss = (struct spigot_softc *)&spigot_softc[unit]; - if(ss->p && ss->signal_num) + if(ss->p && ss->signal_num) { + PROC_LOCK(ss->p); psignal(ss->p, ss->signal_num); + PROC_UNLOCK(ss->p); + } } static int |