X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-1.3 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD,SPF_NEUTRAL X-Spam-Check-By: sourceware.org Message-ID: <4E9EECDB.8020005@cornell.edu> Date: Wed, 19 Oct 2011 11:29:31 -0400 From: Ken Brown User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20110929 Thunderbird/7.0.1 MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: Re: Question about Cygwin's select() References: <4E9ED08B DOT 3080503 AT cornell DOT edu> <20111019144910 DOT GB16351 AT calimero DOT vinschen DOT de> In-Reply-To: <20111019144910.GB16351@calimero.vinschen.de> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com On 10/19/2011 10:49 AM, Corinna Vinschen wrote: > On Oct 19 09:28, Ken Brown wrote: >> I'm trying to debug an emacs problem, and I'm running into something >> I don't understand involving Cygwin's select. I'll try to make an >> STC if necessary, but I thought I'd start with a verbal description >> in case there's an easy answer. Here's the situation: >> >> emacs creates a subprocess running gdb and sends a bunch of commands >> to gdb without immediately reading the resulting output. emacs then >> goes into a loop in which it waits for keyboard input and >> periodically calls select to check for output from subprocesses. >> The first call to select has a 30 second timeout and *always* fails >> with EINTR. As a result, emacs doesn't read the output from gdb >> right away and doesn't properly initialize the gdb buffer. >> Subsequent calls to select sometimes succeed and sometimes fail. >> When I'm running emacs under gdb and stepping through it, the buffer >> eventually gets initialized. When I'm running emacs outside of gdb, >> the buffer doesn't get initialized until I press Return. >> >> I have a simple workaround for this, but I'd like to be sure there >> isn't some underlying bug that I'm masking with the workaround. So >> my question is this: Is there some reason that I should expect that >> first call to select to consistently fail with EINTR, or might this >> indicate a bug? >> >> I realize that it might not be possible to answer the question based >> on the information I've provided, but I thought it was worth a try. > > Some details are missing like the objects used to communicate with GDB. > Does Emacs use a pseudo tty or a pipe? Is that with Cygwin from CVS or > with 1.7.9? And what's your workaround? The EINTR sounds weird. A > testcase would be most helpful. Sorry for the missing details. Emacs uses a pseudo tty. I'm currently using the latest Cygwin snapshot, but I'm pretty sure I saw the same behavior with 1.7.9. I'll recheck that. My workaround is to force emacs to check for process output earlier in the initialization phase. For reasons I don't understand, the select call used at that point always succeeds. I think you've answered my basic question by saying that the EINTR sounds weird. I'll try to make a testcase. Ken -- 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