diff options
author | Ken Brown <kbrown@cornell.edu> | 2020-05-11 09:03:37 -0400 |
---|---|---|
committer | Ken Brown <kbrown@cornell.edu> | 2020-05-11 09:52:23 -0400 |
commit | e637d5361782f0bb911f62355a331aa6098b0058 (patch) | |
tree | 466f86e422d6922a16806013cede3ac513657568 | |
parent | 1f273459473e8a5a7e8b32da8e4b88c16841bd8c (diff) | |
download | cygnal-e637d5361782f0bb911f62355a331aa6098b0058.tar.gz cygnal-e637d5361782f0bb911f62355a331aa6098b0058.tar.bz2 cygnal-e637d5361782f0bb911f62355a331aa6098b0058.zip |
Cygwin: FIFO: improve the interruptibility of raw_read
During a blocking read, we sleep for 1 ms after each iteration through
the connected writers. Currently we do this by calling Sleep (1).
Remove this call to Sleep and instead change the timeout in the
cygwait call from 0 to 1, so that raw_read can be interrupted while
sleeping.
-rw-r--r-- | winsup/cygwin/fhandler_fifo.cc | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/winsup/cygwin/fhandler_fifo.cc b/winsup/cygwin/fhandler_fifo.cc index 9cc00d5e7..e8a05dfbf 100644 --- a/winsup/cygwin/fhandler_fifo.cc +++ b/winsup/cygwin/fhandler_fifo.cc @@ -1335,8 +1335,8 @@ fhandler_fifo::raw_read (void *in_ptr, size_t& len) } else { - /* Allow interruption. */ - DWORD waitret = cygwait (NULL, cw_nowait, cw_cancel | cw_sig_eintr); + /* Allow interruption and don't hog the CPU. */ + DWORD waitret = cygwait (NULL, 1, cw_cancel | cw_sig_eintr); if (waitret == WAIT_CANCELED) pthread::static_cancel_self (); else if (waitret == WAIT_SIGNALED) @@ -1356,8 +1356,6 @@ fhandler_fifo::raw_read (void *in_ptr, size_t& len) set_errno (EBADF); goto errout; } - /* Don't hog the CPU. */ - Sleep (1); } errout: len = (size_t) -1; |