delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2010/08/29/09:39:18

X-Recipient: archive-cygwin AT delorie DOT com
X-SWARE-Spam-Status: No, hits=-2.8 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW
X-Spam-Check-By: sourceware.org
Message-ID: <4C7A62FD.10506@dronecode.org.uk>
Date: Sun, 29 Aug 2010 14:39:09 +0100
From: Jon TURNEY <jon DOT turney AT dronecode DOT org DOT uk>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100802 Thunderbird/3.1.2
MIME-Version: 1.0
To: cygwin-xfree AT cygwin DOT com, cygwin AT cygwin DOT com
Subject: /dev/windows and select() [was Re: Slow response to keypresses in xorg-server-1.8.0-1]
References: <4BDC3161 DOT 9070101 AT cornell DOT edu> <4BDDE5F1 DOT 9080204 AT cornell DOT edu> <4C2B8171 DOT 5020409 AT dronecode DOT org DOT uk> <4C5B08AE DOT 4080902 AT pobox DOT com> <AANLkTin9mOFFkk21dYf+CT2uMXr=x5bnaNsTkH0w0cka AT mail DOT gmail DOT com> <4C5DD910 DOT 9050809 AT dronecode DOT org DOT uk> <AANLkTin6e74L1_Z7KzoOVmynQ+eW6a8tkTK_A21-mpg+@mail.gmail.com>
In-Reply-To: <AANLkTin6e74L1_Z7KzoOVmynQ+eW6a8tkTK_A21-mpg+@mail.gmail.com>
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

--------------030309060805010508040909
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

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.

--------------030309060805010508040909
Content-Type: text/plain;
 name="dev-windows-select-test.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="dev-windows-select-test.c"

CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1
ZGUgPHN5cy9zZWxlY3QuaD4KI2luY2x1ZGUgPGVycm5vLmg+CiNpbmNsdWRl
IDx3aW5kb3dzLmg+CgovLyBnY2MgLW8gZGV2LXdpbmRvd3Mtc2VsZWN0LXRl
c3QuZXhlIGRldi13aW5kb3dzLXNlbGVjdC10ZXN0LmMgLVdhbGwgLW13aW5k
b3dzCgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQp7CiAgaW50
IGZkID0gb3BlbigiL2Rldi93aW5kb3dzIiwgT19SRE9OTFkpOwoKICBpZiAo
UG9zdE1lc3NhZ2UoTlVMTCwgV01fVVNFUiwgMCwgMCkgIT0gMCkKICAgIHBy
aW50ZigiUG9zdE1lc3NhZ2Ugc3VjY2VlZGVkXG4iKTsKICBlbHNlCiAgICBw
cmludGYoIlBvc3RNZXNzYWdlIGZhaWxlZFxuIik7CgogIGlmIChhcmdjIDw9
IDEpCiAgICB7CiAgICAgIE1TRyBtc2c7CiAgICAgIGlmIChQZWVrTWVzc2Fn
ZSgmbXNnLCBOVUxMLCAwLCAwLCBQTV9OT1JFTU9WRSkpCiAgICAgICAgcHJp
bnRmKCJQZWVrTWVzc2FnZSByZXBvcnRzIGEgbWVzc2FnZSBhdmFpbGFibGVc
biIpOwogICAgfQoKICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OwogIHRpbWVv
dXQudHZfc2VjID0gNTsKICB0aW1lb3V0LnR2X3VzZWMgPSAwOwoKICBmZF9z
ZXQgcmVhZGZkczsKICBGRF9aRVJPKCZyZWFkZmRzKTsKICBGRF9TRVQoZmQs
ICZyZWFkZmRzKTsKCiAgaW50IHJjID0gc2VsZWN0KGZkKzEsICZyZWFkZmRz
LCBOVUxMLCBOVUxMLCAmdGltZW91dCk7CiAgcHJpbnRmKCJzZWxlY3QgcmV0
dXJuZWQgJWQgJXNcbiIsIHJjLCBzdHJlcnJvcihlcnJubykpOwoKICByZXR1
cm4gMDsKfQo=


--------------030309060805010508040909
Content-Type: text/plain; charset=us-ascii

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

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019