public inbox for cygwin-xfree@sourceware.org
help / color / mirror / Atom feed
From: Corinna Vinschen <corinna-cygwin@cygwin.com>
To: cygwin-xfree@cygwin.com, cygwin@cygwin.com
Subject: Re: /dev/windows and select() [was Re: Slow response to keypresses in xorg-server-1.8.0-1]
Date: Mon, 30 Aug 2010 12:05:00 -0000	[thread overview]
Message-ID: <20100830112313.GN6726@calimero.vinschen.de> (raw)
In-Reply-To: <4C7A62FD.10506@dronecode.org.uk>

On Aug 29 14:39, Jon TURNEY wrote:
> 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.

Again, thanks for the testcase.  I applied a patch to Cygwin which
should make select on /dev/windows fully functional.

The blessed solution is to replace the call to MsgWaitForMultipleObjects
with a call to MsgWaitForMultipleObjectsEx with the MWMO_INPUTAVAILABLE
flag set.  This flag is defined to do exactly what we need.

The only downside is that this flag does not exist on NT4 and its usage
results in an "invalid argument" error.  So, for NT4, I added the
workaround I described in my yesterday's soliloquy.

I'm planning to release Cygwin 1.7.7 tomorrow at the latest, so please
give it a test as soon as possible.  Here's a binary DLL for testing
(build w/o optimization, so it's probably a bit slow):

  http://cygwin.de/cygwin-177/new-cygwin1.dll.bz2
  (md5sum: 7e07fd9eafd021697a0861c1ae4fa94e)


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat

--
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/


  parent reply	other threads:[~2010-08-30 11:23 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-01 13:49 Slow response to keypresses in xorg-server-1.8.0-1 Ken Brown
2010-05-02 20:52 ` Ken Brown
2010-05-18 18:52   ` Ryan Johnson
2010-06-30 17:40   ` Jon TURNEY
2010-07-01  2:02     ` Ken Brown
2010-07-01 21:07     ` Marco Atzeri
2010-07-19 14:11     ` Simon Marlow
2010-08-03 16:43     ` Ryan Johnson
2010-08-05 18:53     ` Laurent Montaron
2010-08-07 15:39       ` Reini Urban
2010-08-07 22:07         ` Jon TURNEY
2010-08-08 11:05           ` Andy Koppe
2010-08-29 14:17             ` /dev/windows and select() [was Re: Slow response to keypresses in xorg-server-1.8.0-1] Jon TURNEY
2010-08-29 14:41               ` Corinna Vinschen
2010-08-29 14:50                 ` Corinna Vinschen
2010-08-29 15:09                   ` Corinna Vinschen
2010-08-30 11:23                     ` Trollope, David
2010-08-30 12:05               ` Corinna Vinschen [this message]
2010-08-30 12:33                 ` Jon TURNEY

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100830112313.GN6726@calimero.vinschen.de \
    --to=corinna-cygwin@cygwin.com \
    --cc=cygwin-xfree@cygwin.com \
    --cc=cygwin@cygwin.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).