git: 9front

Download patch

ref: e64067a73ac9ae2154e01368f47924253a9b42c8
parent: de46bc97fadf289243db859bafec1d674ba7f51b
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Fri Jul 27 07:08:33 EDT 2012

doom: make sure not to drop keyup/keydown events

--- a/sys/src/games/doom/d_main.c
+++ b/sys/src/games/doom/d_main.c
@@ -130,6 +130,7 @@
 event_t         events[MAXEVENTS];
 int             eventhead;
 int 		eventtail;
+QLock		eventlock;
 
 
 //
@@ -138,8 +139,21 @@
 //
 void D_PostEvent (event_t* ev)
 {
+    int next;
+
+retry:
+    qlock(&eventlock);
+    next = (eventhead+1)&(MAXEVENTS-1);
+    if(next == eventtail){
+        qunlock(&eventlock);
+        if(ev->type != ev_keydown && ev->type != ev_keyup)
+            return;
+        sleep(1);
+        goto retry;
+    }
     events[eventhead] = *ev;
-    eventhead = (++eventhead)&(MAXEVENTS-1);
+    eventhead = next;
+    qunlock(&eventlock);
 }
 
 
@@ -156,7 +170,7 @@
 	 && (W_CheckNumForName("map01")<0) )
       return;
 	
-    for ( ; eventtail != eventhead ; eventtail = (++eventtail)&(MAXEVENTS-1) )
+    for ( ; eventtail != eventhead ; eventtail = (eventtail+1)&(MAXEVENTS-1))
     {
 	ev = &events[eventtail];
 	if (M_Responder (ev))
--