This is the mail archive of the
cygwin-xfree
mailing list for the Cygwin XFree86 project.
Re: bug report/suggested temp. patch: handling bursts of sent keys
- From: Mark Lillibridge <mark dot lillibridge at hp dot com>
- To: cygwin-xfree at cygwin dot com
- Date: Tue, 19 Jan 2010 10:17:50 -0800
- Subject: Re: bug report/suggested temp. patch: handling bursts of sent keys
- References: <201001102040.o0AKenLB010951@mailhub-pa1.hpl.hp.com>
- Reply-to: mark dot lillibridge at hp dot com
- Reply-to: cygwin-xfree at cygwin dot com
Hi.
I don't appear to have gotten any response to my message sent to
this list January 12 (copied below). Do I have the right list? Am I
supposed to use a different mechanism to report bugs with the Cygwin X
server? Please help.
- Thanks,
Mark
> Background:
>
> I use Nuance's Dragon NaturallySpeaking voice recognition software
> to control remote Linux systems from a Windows box. I open up xterms
> and emacs windows on a local Cygwin X server. Occasionally the voice
> recognizer makes a mistake, which has to be corrected. The mechanics of
> how this is done are unimportant; what matters is how Dragon applies the
> correction. It does this by sending a large burst of keystrokes via
> something like SendKeys. (E.g., many (shift) arrow keys to select the
> text to be changed, a backspace to delete it, then the replacement
> text.)
>
> Unfortunately, there is a bug in the current released Cygwin X
> server that causes it to drop sent keystrokes when the burst exceeds a
> given size (roughly 64 or 128 keys depending on the version). This
> breaks correction, and forces painful manual fix up of the text. Note
> that what is really dropped are key events so the system can get into
> the state where the shift key remains pressed or a key starts repeating
> forever because the key up event was dropped.
>
>
> Problem/temporary patch:
>
> I investigated and found that the problem appears to be that the X
> event queue (miEventQueue) in hw/mi/mieq.c is statically allocated with
> a ridiculously small value (512). When keyboard bursts come in, this
> queue overflows, causing the problem. If I set this queue to a more
> reasonable value of 5120:
>
> mieq.c:62:#define QUEUE_SIZE 5120 /* was 512 */
>
> then 10 times larger key bursts can be accommodated without problem.
> This value is probably still too small in practice so it would be safer
> to go with a larger value like 25000.
>
> I characterize this as a temporary patch because ideally either the
> queue would be made dynamic with no upper bound in size, or some kind of
> flow control would be implemented so the code that receives Windows key
> events does not overflow the event queue.
>
>
> Reproducing the problem:
>
> Dragon NaturallySpeaking costs money, so I will instead describe how
> to demonstrate the problem using AutoHotkey, which is a free download
> from http://www.autohotkey.com/. Download that program then create and
> run the following script, burst.ahk:
>
> ==================== cut here for burst.ahk ====================
> #space::
> Send ********** ********** ********** ********** **********{enter}********** ********** ********** ********** **********{enter}********** ********** ********** ********** **********{enter}********** ********** ********** ********** **********{enter}********** ********** ********** ********** **********{enter}
> =================================================================
>
> Finally, type the Windows key and space together while focus is on an X
> application. The bug is not present, the following will be typed:
>
> ********** ********** ********** ********** **********
> ********** ********** ********** ********** **********
> ********** ********** ********** ********** **********
> ********** ********** ********** ********** **********
> ********** ********** ********** ********** **********
>
>
> On the other hand, if the bug is present you'll get something more like:
>
> ********** ********** ********** ********** **********
> ********** ********** ********** ********** **********
> *******
>
>
> - Mark
>
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://x.cygwin.com/docs/
FAQ: http://x.cygwin.com/docs/faq/