* exceptions.cc (sigthread::get_winapi_lock): Just do standard 'give up

timeslice' wait.
(setup_handler): Revamp YA to attempt to deliver signal multiple times on
failure rather than punting to wait_sig.
* miscfuncs.cc (low_priority_sleep): Accept INFINITE sleep to mean "don't reset
the priority after setting it to idle".  Return previous priority.
* winsup.h (SLEEP_0_STAY_LOW): Define.
(low_priority_sleep): Return an int.
* sigproc.h: Define WAIT_SIG_PRIORITY here.
* sigproc.cc: Remove WAIT_SIG_PRIORITY definition.
This commit is contained in:
Christopher Faylor
2002-11-22 04:43:47 +00:00
parent 505746ad22
commit 13af9a149d
7 changed files with 99 additions and 63 deletions

View File

@ -292,12 +292,27 @@ sys_mbstowcs (WCHAR *tgt, const char *src, int len)
return MultiByteToWideChar (get_cp (), 0, src, -1, tgt, len);
}
void __stdcall
int __stdcall
low_priority_sleep (DWORD secs)
{
HANDLE thisthread = GetCurrentThread ();
int curr_prio = GetThreadPriority (thisthread);
bool staylow;
if (secs != INFINITE)
staylow = false;
else
{
secs = 0;
staylow = true;
}
/* Force any threads in normal priority to be scheduled */
SetThreadPriority (thisthread, THREAD_PRIORITY_NORMAL);
Sleep (0);
SetThreadPriority (thisthread, THREAD_PRIORITY_IDLE);
Sleep (secs);
SetThreadPriority (thisthread, curr_prio);
if (!staylow)
SetThreadPriority (thisthread, curr_prio);
return curr_prio;
}