Bug 5799

Summary: Зависает графика (blocked CriticalSection)
Product: WINE@Etersoft Reporter: Vitaly Lipatov <lav>
Component: Запуск ; Отладка ; ИсключенияAssignee: Александр Морозов <amorozov>
Status: CLOSED FIXED QA Contact: Денис Баранов <baraka>
Severity: major    
Priority: P3 CC: kondratyuk, lav, yv
Version: 1.0.12   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 5634, 7363    

Description Vitaly Lipatov 2010-07-21 21:14:26 MSD
Способ воспроизведения:
ПЕРС 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

Хочется видеть эту багу багой по проблеме, а не по ошибке с ПЕРС.
Comment 1 Денис Баранов 2010-08-11 16:03:16 MSD
При возникновении исключения графическое приложение зависает напрочь и приходится его только убивать, нужно чтобы при возникновении CriticalSection выполнение программы продолжалось.
воспроизвести проблему можно в buh/pers/3.1
c:/PERS/persw.exe логин/пароль:777
Comment 2 Александр Морозов 2010-08-12 16:11:49 MSD
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)

Поправил.
Comment 3 Денис Баранов 2010-08-13 09:38:19 MSD
WINE@Etersoft 1.0.12 eter7.6/eter13 (testing)
Принято.