shithub: hexen

Download patch

ref: 421b13439f877ca1b3d9a13c07df10bf16928897
parent: 8bd16fed5b196ae0d0c05e2d8412b2e7b08901ba
author: Jacob Moody <moody@posixcafe.org>
date: Tue Jan 24 21:48:00 EST 2023

lock when adding events, both mouse and key proc do it

--- a/h2_main.c
+++ b/h2_main.c
@@ -602,6 +602,8 @@
 	}
 }
 
+QLock	eventlock;
+
 //==========================================================================
 //
 // H2_ProcessEvents
@@ -639,11 +641,23 @@
 //
 //==========================================================================
 
-void H2_PostEvent(event_t *ev)
+void H2_PostEvent (event_t* ev)
 {
-	events[eventhead] = *ev;
-	eventhead++;
-	eventhead &= (MAXEVENTS - 1);
+    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 = next;
+    qunlock(&eventlock);
 }
 
 //==========================================================================