* DevNotes: Add entry cgf-000021.

* select.cc (select): Unconditionally return when a signal is detected.
(select_stuff::wait): Ditto.
This commit is contained in:
Christopher Faylor
2013-01-11 15:36:40 +00:00
parent 0ad26aec5b
commit 2f47bbd555
4 changed files with 29 additions and 16 deletions

View File

@@ -1,7 +1,7 @@
/* select.cc
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Red Hat, Inc.
2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Red Hat, Inc.
This file is part of Cygwin.
@@ -165,13 +165,12 @@ select (int maxfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
{
case WAIT_SIGNALED:
select_printf ("signal received");
if (_my_tls.call_signal_handler ())
res = select_stuff::select_loop; /* Emulate linux behavior */
else
{
set_sig_errno (EINTR);
res = select_stuff::select_error;
}
/* select() is always interrupted by a signal so set EINTR,
unconditionally, ignoring any SA_RESTART detection by
call_signal_handler(). */
_my_tls.call_signal_handler ();
set_sig_errno (EINTR);
res = select_stuff::select_signalled;
break;
case WAIT_CANCELED:
sel.destroy ();
@@ -404,13 +403,12 @@ next_while:;
be assured that a signal handler won't jump out of select entirely. */
cleanup ();
destroy ();
if (_my_tls.call_signal_handler ())
res = select_loop;
else
{
set_sig_errno (EINTR);
res = select_signalled; /* Cause loop exit in cygwin_select */
}
/* select() is always interrupted by a signal so set EINTR,
unconditionally, ignoring any SA_RESTART detection by
call_signal_handler(). */
_my_tls.call_signal_handler ();
set_sig_errno (EINTR);
res = select_signalled; /* Cause loop exit in cygwin_select */
break;
case WAIT_FAILED:
system_printf ("WaitForMultipleObjects failed, %E");