aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2012-05-29 13:11:34 +0000
committerCorinna Vinschen <corinna@vinschen.de>2012-05-29 13:11:34 +0000
commitd6719f7e17a613ad90039dc4adabbc82f8532d52 (patch)
tree90e2536e3462142e323e7d318372ad478137390e
parentd560c4b2baba962ab5fd5beccf2aba1cad16fa2f (diff)
downloadnewlib-d6719f7e17a613ad90039dc4adabbc82f8532d52.zip
newlib-d6719f7e17a613ad90039dc4adabbc82f8532d52.tar.gz
newlib-d6719f7e17a613ad90039dc4adabbc82f8532d52.tar.bz2
* select.cc (select_stuff::wait): Temporarily disable restarting
entirely.
-rw-r--r--winsup/cygwin/ChangeLog5
-rw-r--r--winsup/cygwin/select.cc12
2 files changed, 14 insertions, 3 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index c265b20..7958878 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,5 +1,10 @@
2012-05-29 Corinna Vinschen <corinna@vinschen.de>
+ * select.cc (select_stuff::wait): Temporarily disable restarting
+ entirely.
+
+2012-05-29 Corinna Vinschen <corinna@vinschen.de>
+
* security.h (cygsidlist::+=): Correctly copy well_known_sid info from
source cygsid.
diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc
index c8d7ddb..19778ce 100644
--- a/winsup/cygwin/select.cc
+++ b/winsup/cygwin/select.cc
@@ -331,13 +331,17 @@ select_stuff::wait (fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
{
case WAIT_OBJECT_0:
select_printf ("signal received");
+#if 0
/* FIXME? Partial revert of change from 2012-01-22. If the signal
handler is called before the threads are stopped via cleanup,
- emacs 24.x crashes in thread_pipe. For now, do not call the
- signal handler if we're not in the main thread, but cleanup
- before calling the signal handler. */
+ emacs 24.x crashes in thread_pipe. Just restarting without
+ calling the signal handler makes select entirely uninterruptible
+ when called from a thread not the main thread, see
+ http://cygwin.com/ml/cygwin/2012-05/msg00580.html
+ So, for now, just disable restarting entirely. */
if (!return_on_signal)
goto looping; /* Emulate linux behavior */
+#endif
cleanup ();
_my_tls.call_signal_handler ();
set_sig_errno (EINTR);
@@ -389,7 +393,9 @@ select_stuff::wait (fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
cleanup ();
goto out;
}
+#if 0
looping:
+#endif
if (ms == INFINITE)
{
select_printf ("looping");