/dev/windows and select() [was Re: Slow response to keypresses in xorg-server-1.8.0-1]

Jon TURNEY jon.turney@dronecode.org.uk
Sun Aug 29 14:17:00 GMT 2010


On 08/08/2010 12:04, Andy Koppe wrote:
> On 7 August 2010 23:07, Jon TURNEY wrote:
>> Hmmm, looking again at the implementation of select(), I don't immediately
>> see that when waiting on /dev/windows, it checks that the message queue has
>> old messages on it before waiting.  The MSDN documentation for
>> MsgWaitForMultipleObjects() seems to says that messages which had arrived
>> before the last PeekMessage() etc. aren't considered new and so don't end
>> the wait?
>
> I think you're right, a call to PeekMessage is needed for proper
> select() semantics: it shouldn't block if data is available for
> reading.

Attached is a small test-case which seems to demonstrate this problem.

Run ./dev-windows-select-test and observe select() blocks for the full 
timeout, despite the fact that the /dev/windows fd is ready for reading (and 
it reported as such as the end of the timeout)

If you run './dev-windows-select-test -skip' to skip the PeekMessage(), 
select() returns immediately, indicating the /dev/windows fd is ready for reading.
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: dev-windows-select-test.c
URL: <http://cygwin.com/pipermail/cygwin/attachments/20100829/d066510f/attachment.c>
-------------- next part --------------
--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


More information about the Cygwin mailing list