Cygwin: timerfd: add a sleep when being debugged

A sleep is required on Windows 10 64 bit only before calling
RegisterClassW in the timerfd thread, and only when running
under strace.  One of the child processes inheriting the timerfd
descriptor will get a STATUS_FLOAT_INEXACT_RESULT exception inside
of msvcrt.dll.  It's apparently some timing problem.  It occurs
in 4 out of 5 runs under strace only.  WOW64 and Windows 7 64 bit
don't have this problem.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2019-02-26 10:46:05 +01:00
parent 5a483b6bca
commit 639645a2fd
1 changed files with 9 additions and 0 deletions

View File

@ -32,6 +32,15 @@ timerfd_tracker::create_timechange_window ()
wclass.lpfnWndProc = DefWindowProcW;
wclass.hInstance = user_data->hmodule;
wclass.lpszClassName = cname;
/* This sleep is required on Windows 10 64 bit only, and only when running
under strace. One of the child processes inheriting the timerfd
descriptor will get a STATUS_FLOAT_INEXACT_RESULT exception inside of
msvcrt.dll. While this is completely crazy in itself, it's apparently
some timing problem. It occurs in 4 out of 5 runs under strace only.
The sleep is required before calling RegisterClassW. Moving it before
CreateWindowExW does not work. What the heck? */
if (being_debugged ())
Sleep (1L);
atom = RegisterClassW (&wclass);
if (!atom)
debug_printf ("RegisterClass %E");