doom: make sure not to drop keyup/keydown events

front
cinap_lenrek 2012-07-27 11:08:33 +02:00
parent 98b9c4eb1e
commit ab08c97e60
1 changed files with 16 additions and 2 deletions

View File

@ -130,6 +130,7 @@ void D_DoAdvanceDemo (void);
event_t events[MAXEVENTS];
int eventhead;
int eventtail;
QLock eventlock;
//
@ -138,8 +139,21 @@ int eventtail;
//
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 @@ void D_ProcessEvents (void)
&& (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))