diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 4bffe2169..c6851787e 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,9 @@ +2002-11-04 Christopher Faylor + + * pinfo.cc (_pinfo::commune_send): Set priority low when sleeping, + waiting for commune completion so that we don't spin waiting for lower + priority processes. + 2002-11-04 Christopher Faylor * sigproc.cc (WAIT_SIG_PRIORITY): Bump to THREAD_PRIORITY_TIME_CRITICAL. diff --git a/winsup/cygwin/pinfo.cc b/winsup/cygwin/pinfo.cc index 0f9510fda..f47e3bd2d 100644 --- a/winsup/cygwin/pinfo.cc +++ b/winsup/cygwin/pinfo.cc @@ -362,12 +362,17 @@ _pinfo::commune_send (DWORD code) if (sig_send (this, __SIGCOMMUNE)) goto err; + /* FIXME: Need something better than an busy loop here */ bool isalive; while ((isalive = alive ())) if (myself->hello_pid <= 0) break; else - Sleep (0); + { + DWORD prio = SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_IDLE); + Sleep (0); + SetThreadPriority (GetCurrentThread (), prio); + } CloseHandle (tome); tome = NULL;