This is the mail archive of the cygwin-cvs@cygwin.com 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]

[newlib-cygwin] yield: Don't lower thread priority, it leads to starvation


https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=51a993c266581ba41f1622abd274d9848a37cf1d

commit 51a993c266581ba41f1622abd274d9848a37cf1d
Author: Corinna Vinschen <corinna@vinschen.de>
Date:   Wed Mar 8 17:44:15 2017 +0100

    yield: Don't lower thread priority, it leads to starvation
    
    ...and it's not required anymore to have the same effect as the original
    code post-XP.
    
    Signed-off-by: Corinna Vinschen <corinna@vinschen.de>

Diff:
---
 winsup/cygwin/miscfuncs.cc | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/winsup/cygwin/miscfuncs.cc b/winsup/cygwin/miscfuncs.cc
index 2117eb9..e2ab7a0 100644
--- a/winsup/cygwin/miscfuncs.cc
+++ b/winsup/cygwin/miscfuncs.cc
@@ -85,17 +85,18 @@ check_iovec (const struct iovec *iov, int iovcnt, bool forwrite)
 void
 yield ()
 {
-  int prio = GetThreadPriority (GetCurrentThread ());
-  SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_IDLE);
-  /* MSDN implies that SleepEx will force scheduling of other threads.
+  /* MSDN implies that Sleep will force scheduling of other threads.
      Unlike SwitchToThread() the documentation does not mention other
      cpus so, presumably (hah!), this + using a lower priority will
      stall this thread temporarily and cause another to run.
      (stackoverflow and others seem to confirm that setting this thread
      to a lower priority and calling Sleep with a 0 paramenter will
-     have this desired effect)  */
+     have this desired effect)
+
+     CV 2017-03-08: Drop lowering the priority.  It leads to potential
+		    starvation and it should not be necessary anymore
+		    since Server 2003.  See the MSDN Sleep man page. */
   Sleep (0L);
-  SetThreadPriority (GetCurrentThread (), prio);
 }
 
 /* Get a default value for the nice factor.  When changing these values,


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