summaryrefslogtreecommitdiffstats
path: root/sys/i386/isa/pcvt/pcvt_ext.c
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2001-03-07 03:37:06 +0000
committerjhb <jhb@FreeBSD.org>2001-03-07 03:37:06 +0000
commit9cd254601baefc2dc9c953abe9747717374ff8b1 (patch)
treeac4298224e8af28e8b2f904a43a2925c21dfc798 /sys/i386/isa/pcvt/pcvt_ext.c
parentace71d59bf35fa6d911520ec855d0100773422a8 (diff)
downloadFreeBSD-src-9cd254601baefc2dc9c953abe9747717374ff8b1.zip
FreeBSD-src-9cd254601baefc2dc9c953abe9747717374ff8b1.tar.gz
Grab the process lock while calling psignal and before calling psignal.
Diffstat (limited to 'sys/i386/isa/pcvt/pcvt_ext.c')
-rw-r--r--sys/i386/isa/pcvt/pcvt_ext.c25
1 files changed, 20 insertions, 5 deletions
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
{
OpenPOWER on IntegriCloud