summaryrefslogtreecommitdiff
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
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.
-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;