This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: SIGTSTP and select


On Apr  3 10:13, Bob Rossi wrote:
> On Mon, Apr 02, 2007 at 08:37:53PM -0400, Christopher Faylor wrote:
> > On Mon, Apr 02, 2007 at 08:07:23PM -0400, Bob Rossi wrote:
> > >When ctrl-z is typed, CGDB receives a SIGTSTP on both linux and cygwin.
> > >When CGDB is at the select loop and this happens on linux select returns
> > >-1 and errno is set to EINTR. My code simple does a 'continue' when this
> > >happens and the select loop is reentered. All works well. On cygwin,
> > >select does not return with -1. (I didn't check the return value but I
> > >can, I just compare to -1 in an if statement). In fact, select also
> > >detects that input is ready on stdin. This causes CGDB to get to a read
> > >system call (which is non blocking) and the read system call fails with
> > >errno set to EAGAIN. This causes CGDB to exit.
> > >
> > >The main loop looks something like this,
> > >  if (select (max + 1, &rset, NULL, NULL, NULL) == -1)
> > >    { 
> > >      if (errno == EINTR)
> > >        continue;
> > >      ..
> > >    }
> > >
> > >  if (FD_ISSET (STDIN_FILENO, &rset)) {
> > >    handle_stdin
> > >  }
> > >
> > >So, my question is, is there a bug with select on cygwin? Is select
> > >working properly and I should handle the read call differently? Why does
> > >it act differently than linux?
> > 
> > You say that something changed between different releases but you don't
> > mention what those releases are.  Is this releases of Cygwin?  If so,
> > what releases?
> > 
> > If this is as easy to demonstrate as you say, then a simple test case
> > is definitely called for.
> 
> Hi Christopher,
> 
> Attached is the test case. If I run it under linux, and then type ctrl-z, I 
> never get into the user_input_loop call. If I run it in cygwin, I do.
> 
> Hopefully I'm doing something wrong here. Please advise!

I'm a bit puzzled.  I don't see any difference in behaviour on Linux and
Cygwin related to your testcase.  I have no problems to trigger the
user_input_loop call on Linux and Cygwin.  After I press ctrl-z, I don't
get into it on both systems.  After unsuspending the process, I get into
user_input_loop on both systems again.  Either your testcase is wrong,
or you should exactly specify what has to be typed to trigger the
problem.  I tested this with Cygwin 1.5.24 and Linux 2.6.20.5, btw.


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://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]