* 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:
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user