Summary: | Не работает wine --update в eter25 | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Andrey Vusik <night> |
Component: | 3D-графика; GL; DirectX | Assignee: | Anton Rudnev <mibori> |
Status: | CLOSED FIXED | QA Contact: | |
Severity: | blocker | ||
Priority: | P1 | CC: | kondratyuk, lav |
Version: | 1.0.9 | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | All | ||
URL: | http://bugs.winehq.org/show_bug.cgi?id=6159 | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | |||
Bug Depends on: | |||
Bug Blocks: | 777, 2357, 2649 |
Description
Andrey Vusik
2008-10-17 17:31:04 MSD
Ubuntu 8.04, Debian 4.0 ALT Linux на cellar'е... Проблема в функции NdrSendReceive (dlls/rpcrt4). Там уже есть наш хак, но он не исправляет проблему. Там неясность, как должна обрабатываться ошибка. Возможно нужно почитать об этих функциях, и посмотреть на тесты. Теста на эту функцию явно не хватает. Судя по коду ReactOS, ничего правильного в генерации исключения нет: http://www.reactos.org/generated/doxygen/dd/d1f/ndr__midl_8c-source.html Хотя вопрос, кто же теряет критическую секцию, остаётся. См. также http://bugs.winehq.org/show_bug.cgi?id=6159 http://www.winehq.org/pipermail/wine-cvs/2006-February/020703.html Кажется, скоро победа будет за нами ... =>1 0x7bc32fc6 RtlpWaitForCriticalSection+0xe3(crit=0x1106f8) [/srv/mibori/Projects/wine/dlls/ntdll/critsection.c:449] in ntdll (0x7e6f8508) 2 0x7bc33532 RtlEnterCriticalSection+0x147(crit=0x1106f8) [/srv/mibori/Projects/wine/dlls/ntdll/critsection.c:582] in ntdll (0x7e6f8548) 3 0x7eb1f2bb scmdatabase_lock_exclusive+0x15(db=0x1106e8) [/srv/mibori/Projects/wine/programs/services/services.c:474] in services (0x7e6f8568) 4 0x7eb1bd1c svcctl_CreateServiceW+0x2be(hSCManager=0x111ca0, lpServiceName=0x111d90, lpDisplayName=0x111dac, dwDesiredAccess=983551, dwServiceType=16, dwStartType=3, dwErrorControl=1, lpBinaryPathName=0x111dd4, lpLoadOrderGroup=(nil), lpdwTagId=(nil), lpDependencies=0x0, dwDependenciesSize=0, lpServiceStartName=(nil), lpPassword=0x0, dwPasswordSize=0, phService=0x111cc0) [/srv/mibori/Projects/wine/programs/services/rpc.c:389] in services (0x7e6f85c8) 5 0x7eb235f3 svcctl_svcctl_CreateServiceW+0x6de(_pRpcMessage=0x111ae0) [/srv/mibori/Projects/wine/programs/services/svcctl_s.c:1480] in services (0x7e6f8828) 6 0x7eae7f70 process_request_packet+0x312(conn=0x111588, hdr=0x1119c8, msg=0x111ae0) [/srv/mibori/Projects/wine/dlls/rpcrt4/rpc_server.c:291] in rpcrt4 (0x7e6f8958) 7 0x7eae8430 RPCRT4_process_packet+0xee(conn=0x111588, hdr=0x1119c8, msg=0x111ae0) [/srv/mibori/Projects/wine/dlls/rpcrt4/rpc_server.c:346] in rpcrt4 (0x7e6f8998) 8 0x7eae84f7 RPCRT4_worker_thread+0x35(the_arg=0x111790) [/srv/mibori/Projects/wine/dlls/rpcrt4/rpc_server.c:363] in rpcrt4 (0x7e6f89c8) 9 0x7bc75892 worker_thread_proc+0x12e(param=(nil)) [/srv/mibori/Projects/wine/dlls/ntdll/threadpool.c:111] in ntdll (0x7e6f8a18) 10 0x7bc732e6 init_teb+0xb2(teb=0x7bc75754) [/srv/mibori/Projects/wine/dlls/ntdll/thread.c:128] in ntdll (0x7e6f8a28) 11 0x7bc73365 call_thread_func+0x6d(rtl_func=0x7bc75754, arg=(nil)) [/srv/mibori/Projects/wine/dlls/ntdll/thread.c:392] in ntdll (0x7e6f8ac8) 12 0x7bc735c5 start_thread+0x1bc(info=0x7ffc8fb8) [/srv/mibori/Projects/wine/dlls/ntdll/thread.c:454] in ntdll (0x7e6f93c8) 13 0xb7e78f83 start_thread+0xb3() in libpthread.so.0 (0x7e6f94b8) 14 0xb7e0763e __clone+0x5e() in libc.so.6 (0x00000000) (In reply to comment #3) > Кажется, скоро победа будет за нами ... > кусок дебаглога: func(1126b0) #23 => mib svcctl_svcctl_ChangeServiceConfigW(1126b0) ... mib svcctl_ChangeServiceConfigW, arg lpDisplayName == ════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ mib call RtlEnterCriticalSection(1106f8) in thread 14, #28 mib ret RtlEnterCriticalSection(1106f8) in thread 14 -> STATUS_SUCCESS (end) mib svcctl_ChangeServiceConfigW(...) after enter crit sect 1106f8 MIB raise_exception обращаем внимание на значение lpDisplayName, а теперь иcходник: service_lock_exclusive(service->service_entry); // <---- enter crit! if (is_marked_for_delete(service->service_entry)) { service_unlock(service->service_entry); return ERROR_SERVICE_MARKED_FOR_DELETE; } if (lpDisplayName != NULL && (entry = scmdatabase_find_service_by_displayname(service->service_entry->db, lpDisplayName)) && (entry != service->service_entry)) { service_unlock(service->service_entry); // <-------leave crit! return ERROR_DUPLICATE_SERVICE_NAME; } // больше service_unlock(service->service_entry) нет в нем service_lock_exclusive(service->service_entry) входит в крит. секцию а service_unlock(service->service_entry) выходт из нее. программа падает на scmdatabase_find_service_by_displayname(service->service_entry->db, lpDisplayName)) и не закрывает критическую секцию. бэктрейс: =>1 0xb7dbfe4b strcmpiW+0x36(str1=0x1128a0, str2=(nil)) [/srv/mibori/Projects/wine/libs/wine/string.c:31] in libwine.so.1 (0x7ebe94c8) 2 0x7ef1fda3 scmdatabase_find_service_by_displayname+0x30(db=0x1106e8, name=0x1128a0) [/home/mibori/Projects/wine/programs/services/services.c:347] in services (0x7ebe94f8) 3 0x7ef1d1de svcctl_ChangeServiceConfigW+0x108(hService=0x112700, dwServiceType=1, dwStartType=2, dwErrorControl=1, lpBinaryPathName=0x112820, lpLoadOrderGroup=(nil), lpdwTagId=(nil), lpDependencies=0x0, dwDependenciesSize=0, lpServiceStartName=(nil), lpPassword=0x0, dwPasswordSize=0, lpDisplayName=0x1128a0) [/srv/mibori/Projects/wine/programs/services/rpc.c:503] in services (0x7ebe95d8) 4 0x7ef23c9d svcctl_svcctl_ChangeServiceConfigW+0x5d4(_pRpcMessage=0x1126c8) [/srv/mibori/Projects/wine/programs/services/svcctl_s.c:1208] in services (0x7ebe9828) 5 0x7eec8dc6 process_request_packet+0x3c4(conn=0x111588, hdr=0x111eb8, msg=0x1126c8) [/srv/mibori/Projects/wine/dlls/rpcrt4/rpc_server.c:313] in rpcrt4 (0x7ebe9958) 6 0x7eec93c9 RPCRT4_process_packet+0x13a(conn=0x111588, hdr=0x111eb8, msg=0x1126c8) [/srv/mibori/Projects/wine/dlls/rpcrt4/rpc_server.c:397] in rpcrt4 (0x7ebe9998) 7 0x7eec94c3 RPCRT4_worker_thread+0x50(the_arg=0x112080) [/srv/mibori/Projects/wine/dlls/rpcrt4/rpc_server.c:416] in rpcrt4 (0x7ebe99c8) 8 0x7bc758de worker_thread_proc+0x13e(param=(nil)) [/srv/mibori/Projects/wine/dlls/ntdll/threadpool.c:114] in ntdll (0x7ebe9a18) 9 0x7bc73332 call_thread_entry_point+0xe() in ntdll (0x7ebe9a28) 10 0x7bc733b1 call_thread_func+0x7d(rtl_func=0x7bc757a0, arg=(nil)) [/srv/mibori/Projects/wine/dlls/ntdll/thread.c:394] in ntdll (0x7ebe9ac8) 11 0x7bc73611 start_thread+0x1cc(info=0x7ffccfb8) [/srv/mibori/Projects/wine/dlls/ntdll/thread.c:456] in ntdll (0x7ebea3c8) 12 0xb7d8ef83 start_thread+0xb3() in libpthread.so.0 (0x7ebea4b8) 13 0xb7d1d63e __clone+0x5e() in libc.so.6 (0x00000000) Fedora 9 --- плюс 1) Аналогичная ошибка. Потому что нужно дождаться eter26 и не проверять раньше времени. Правка для eter27 работает. Debian 4.0 wine, libwine от 25 октября в консоли при первом запуске Failed to load DLL /home/guest/.wine/dosdevices/c:/windows/system32/msxml3.dll (In reply to comment #8) > Debian 4.0 > wine, libwine от 25 октября > > в консоли при первом запуске > Failed to load DLL /home/guest/.wine/dosdevices/c:/windows/system32/msxml3.dll > Не туда написал.. |