summaryrefslogtreecommitdiff
path: root/sys/src
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2013-07-07 21:02:46 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2013-07-07 21:02:46 +0200
commitbb11bb1c1f18660c29d5bc46e8de049fd03ff2a0 (patch)
tree67f50998a0491268073575b71a0493ce1401dd92 /sys/src
parente32940f7269306a108fbe3f2ee742a3a8e74133e (diff)
vesa: fix blank/unblank wakeups
it could happen that we unblanked while vesaproc was currently blanking (when manually blanking using vgactl for example). the wakeup of the unblank is lost.
Diffstat (limited to 'sys/src')
-rw-r--r--sys/src/9/pc/vgavesa.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/sys/src/9/pc/vgavesa.c b/sys/src/9/pc/vgavesa.c
index fbe051f5f..b2748b4af 100644
--- a/sys/src/9/pc/vgavesa.c
+++ b/sys/src/9/pc/vgavesa.c
@@ -163,22 +163,25 @@ vesalinear(VGAscr *scr, int, int)
}
static int
-vesadisabled(void *)
+gotctl(void *arg)
{
- return vesactl == Cdisable;
+ return vesactl != *((int*)arg);
}
static void
vesaproc(void*)
{
Ureg u;
+ int ctl;
- while(vesactl != Cdisable){
+ ctl = Cenable;
+ while(ctl != Cdisable){
if(!waserror()){
- sleep(&vesar, vesadisabled, nil);
+ sleep(&vesar, gotctl, &ctl);
+ ctl = vesactl;
vbesetup(&u, 0x4f10);
- if(vesactl == Cblank)
+ if(ctl == Cblank)
u.bx = 0x0101;
else
u.bx = 0x0001;