Способ воспроизведения: ПЕРС 3.1, меню Администрирование, Резервное копирование и переиндексирование. При запуске на переиндексирование зависает: err:ntdll:RtlpWaitForCriticalSection section 0x7e5f79a0 «x11drv_main.c: X11DRV_CritSection» wait timed out in thread 0032, blocked by 0040, retrying (60 sec) err:ntdll:RtlpWaitForCriticalSection section 0x7ea2baa0 «user_main.c: USER_SysLevel» wait timed out in thread 0040, blocked by 0032, retrying (60 sec) wine: Critical section 7e5f79a0 wait failed at address 0x7ef6d2d0 (thread 0032), starting debugger... WineDbg starting on pid 003f Unhandled exception: wait failed on critical section 0x7e5f79a0 thread_data_tls_index+0x3c err:seh:raise_exception Unhandled exception code c0000194 flags 0 addr 0x7ef6d2d0 См. также http://bugs.etersoft.ru/show_bug.cgi?id=4328#c2 Хочется видеть эту багу багой по проблеме, а не по ошибке с ПЕРС.
При возникновении исключения графическое приложение зависает напрочь и приходится его только убивать, нужно чтобы при возникновении CriticalSection выполнение программы продолжалось. воспроизвести проблему можно в buh/pers/3.1 c:/PERS/persw.exe логин/пароль:777
Wine-dbg>info thread process tid prio (all id:s are in hex) 0000000e 00000027 0 0000001f 0 00000014 0 00000010 0 0000000f 0 00000011 00000017 0 00000013 0 00000012 0 00000018 0000002b 0 00000023 0 0000001b 0 0000001a 0 00000019 0 0000001c 00000020 0 0000001e 0 0000001d 0 00000024 00000028 0 00000026 0 00000025 0 00000035 (D) C:\PERS\persw.exe 0000003a 0 00000036 0 <== 00000037 00000038 0 Wine-dbg>bt Backtrace: =>0 0x7ef65a8d RtlpWaitForCriticalSection+0x2fd() in ntdll (0x0032bb60) 1 0x7ef65dc5 RtlEnterCriticalSection+0x45() in ntdll (0x0032bb90) 2 0x7ee33c1c _EnterSysLevel+0x7c() in kernel32 (0x0032bbf0) 3 0x7e9f2560 in user32 (+0xa2560) (0x0032bc10) 4 0x7e9f3418 in user32 (+0xa3418) (0x0032bc50) 5 0x7e971406 in user32 (+0x21406) (0x0032bc80) 6 0x7e971e70 in user32 (+0x21e70) (0x0032bd50) 7 0x7e9720d8 GetClassLongW+0x18() in user32 (0x0032bd70) 8 0x7e9f6d5f GetWindowInfo+0xef() in user32 (0x0032bdb0) 9 0x7e630e80 X11DRV_GetCursorPos+0x80() in winex11 (0x0032bec0) 10 0x7e9a6f77 GetCursorPos+0x27() in user32 (0x0032bee0) 11 0x0c019a82 in vfp7r (+0x19a82) (0x0032bf1c) 12 0x0c019a50 in vfp7r (+0x19a50) (0x0032c00c) 13 0x0c018ab0 in vfp7r (+0x18ab0) (0x0032c174) 14 0x0c018c1d in vfp7r (+0x18c1d) (0x0032c218) 15 0x7ea01b5a WINPROC_wrapper+0x1a() in user32 (0x0032c248) 16 0x7ea03405 in user32 (+0xb3405) (0x0032c328) 17 0x7ea0633b in user32 (+0xb633b) (0x0032c378) 18 0x7e9c6446 DispatchMessageA+0x96() in user32 (0x0032c3c8) 19 0x0c1b1c52 in vfp7r (+0x1b1c52) (0x0032c87c) Wine-dbg>bt 0x3a Backtrace: =>0 0x7ef65a8d RtlpWaitForCriticalSection+0x2fd() in ntdll (0x0579e0a4) 1 0x7ef65dc5 RtlEnterCriticalSection+0x45() in ntdll (0x0579e0d4) 2 0x7e64ef50 wine_tsx11_lock+0x20() in winex11 (0x0579e0f4) 3 0x7e65fac2 X11DRV_XRender_UpdateDrawable+0x22() in winex11 (0x0579e134) 4 0x7e62bf2c X11DRV_ExtEscape+0x35c() in winex11 (0x0579e224) 5 0x7e8cce10 ExtEscape+0x50() in gdi32 (0x0579e254) 6 0x7e6474fa X11DRV_ReleaseDC+0xba() in winex11 (0x0579e2c4) 7 0x7e9d5496 in user32 (+0x85496) (0x0579e2e4) 8 0x7e9d5f4f in user32 (+0x85f4f) (0x0579e394) 9 0x7e9fbda2 in user32 (+0xabda2) (0x0579e4a4) 10 0x7e9f91ba in user32 (+0xa91ba) (0x0579e6b4) 11 0x7e9fa70d CreateWindowExW+0x5d() in user32 (0x0579e704) 12 0x7e99088c in user32 (+0x4088c) (0x0579e814) 13 0x7e991c9b DialogBoxIndirectParamAorW+0x3b() in user32 (0x0579e844) 14 0x7e991d01 DialogBoxIndirectParamW+0x41() in user32 (0x0579e874) 15 0x7e9cfcde MessageBoxIndirectW+0x9e() in user32 (0x0579e8c4) 16 0x7e9d141b MessageBoxIndirectA+0xab() in user32 (0x0579e924) 17 0x7e9d151f MessageBoxExA+0x5f() in user32 (0x0579e974) 18 0x7e9d15a5 MessageBoxA+0x75() in user32 (0x0579e9b4) 19 0x0c1b1aad in vfp7r (+0x1b1aad) (0x0579e9d8) 20 0x7efa7f3d in ntdll (+0x67f3d) (0x0579ea88) 21 0x7efa8120 in ntdll (+0x68120) (0x0579f398) 22 0xb762a6c0 start_thread+0xa0() in libpthread.so.0 (0x0579f498) Происходит взаимоблокировка. Один поток входит в X11DRV_CritSection и затем пытается войти в USER_SysLevel. Другой поток сначала входит в USER_SysLevel, а затем пытается войти в X11DRV_CritSection. Проблема связана с этим коммитом: commit 2130bcfe904b3fb0e3d76d6fe8941b3f257661c7 Author: Ivan Donchevskiy <yv@builder.office.etersoft.ru> Date: Tue Jul 7 13:35:20 2009 +0400 winex11.drv Hack for 1c8.1: not to draw help messages if window is inactive (eterbug #1695) Поправил.
WINE@Etersoft 1.0.12 eter7.6/eter13 (testing) Принято.