http://bugs.winehq.org/show_bug.cgi?id=10318
Fábio Capela fabio.capela@yahoo.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |fabio.capela@yahoo.com
--- Comment #19 from Fábio Capela fabio.capela@yahoo.com 2008-01-18 06:57:58 --- This seems to be the same problem I'm having running Aliens vs Predator. A trace with +keyboard is almost identical to the ones you are getting; a trace with +key show that each ToUnicodeEx invocation try a different keycode:
trace:keyboard:X11DRV_ToUnicodeEx AltGrMask = 0000 trace:key:X11DRV_ToUnicodeEx (00E2, 0029) : faked state = 0x0000 trace:key:EVENT_event_to_vkey e->keycode = 5e trace:keyboard:X11DRV_ToUnicodeEx Found keycode 94 (0x5E) trace:key:X11DRV_ToUnicodeEx type 2, window 5800002, state 0x0000, keycode 0x005e trace:key:X11DRV_ToUnicodeEx nbyte = 1, status 0x4 trace:key:X11DRV_ToUnicodeEx KeyPress : keysym=3C (less), # of chars=1 / "<" trace:key:X11DRV_ToUnicodeEx Translating char 0x3c to unicode trace:key:X11DRV_ToUnicodeEx ToUnicode about to return 1 with char 3c trace:keyboard:X11DRV_ToUnicodeEx AltGrMask = 0000 trace:key:X11DRV_ToUnicodeEx (00E2, 002A) : faked state = 0x0000 trace:key:EVENT_event_to_vkey e->keycode = 5e trace:keyboard:X11DRV_ToUnicodeEx Found keycode 94 (0x5E) trace:key:X11DRV_ToUnicodeEx type 2, window 5800002, state 0x0000, keycode 0x005e trace:key:X11DRV_ToUnicodeEx nbyte = 1, status 0x4 trace:key:X11DRV_ToUnicodeEx KeyPress : keysym=3C (less), # of chars=1 / "<" trace:key:X11DRV_ToUnicodeEx Translating char 0x3c to unicode trace:key:X11DRV_ToUnicodeEx ToUnicode about to return 1 with char 3c
The game seems to test every possible combination of virtual key and scan code with ToUnicodeEx (possibly a brute force approach to get the keyboard map). This can easily be some tens of thousands of calls to this function. Every call to ToUnicodeEx will result in a call to either XmbLookupString or XLookupString - and I believe either X is not prepared to handle such a swarm of requests or the game is getting tens of thousands of seemingly valid virtual key to keycode combinations, which seems to be a good reason for the lockup.