https://bugs.winehq.org/show_bug.cgi?id=38980
Bug ID: 38980 Summary: World of Warships/Planes/Tanks client in torrent download mode crashes spuriously on high bandwidth load (i/o completion ports) Product: Wine Version: 1.7.47 Hardware: x86-64 OS: Linux Status: NEW Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: focht@gmx.net Distribution: ---
Hello folks,
while checking out some 'World of Warships/Planes/Tanks' issues, I've seen this "turn off torrent downloader to avoid crash" note multiple times in WineHQ appdb entries and also on various Internet sites.
Although this workaround solves the actual client download/updater problem, it seems no one bothered to report this here for some years?
I could reproduce crashes with all 'World of WarXXX' clients using the torrent download mode. The crash is caught before any registered JIT debugger ('AeDebug') as the client installs a top level exception filter. Upon failure it simply displays a message box with the option to restart the download client.
Client log file:
--- snip --- ... 26/07/2015 19:46:31 Loading localized resources... 26/07/2015 19:46:32 Loading configuration... 26/07/2015 19:46:32 Setup language: content_lang="en" 26/07/2015 19:46:32 Start "WoWSLauncher.exe" params="C:\Games\World_of_Warships\WoWSLauncher.exe" 26/07/2015 19:46:32 Session id="a01bae86c620733b0ed98078ba6a9bbff72bfd12" 26/07/2015 19:46:32 Info for "WoWSLauncher.exe": Version: 0.3.13.242, Comment: "Built: 20150622 142954, Revision: #586733 (stable_3.13.3)" 26/07/2015 19:46:32 Create update folder: path="C:\Games\World_of_Warships\Updates" 26/07/2015 19:46:32 Try access patch folder: path="C:\Games\World_of_Warships\Updates" 26/07/2015 19:46:32 Create temp folder: path="C:\Games\World_of_Warships\UpdatesData\temp" 26/07/2015 19:46:32 Try access temp folder: path="C:\Games\World_of_Warships\UpdatesData\temp" 26/07/2015 19:46:32 Save configuration: path="C:\Games\World_of_Warships\WoWSLauncher.cfg" 26/07/2015 19:46:33 Start update process 26/07/2015 19:46:33 Clear old/temp files 26/07/2015 19:46:33 Obtain patch information. target: "launcher"... 26/07/2015 19:46:33 Create update work folder: path="C:\Games\World_of_Warships\UpdatesData\launcher" 26/07/2015 19:46:33 Try access patch work folder: path="C:\Games\World_of_Warships\UpdatesData\launcher" 26/07/2015 19:46:33 System update. Cleaning up system update folder. 26/07/2015 19:46:33 send http request. url: "http://update.worldofwarships.eu?target=launcher&client_ver=unknown&..." 26/07/2015 19:46:33 http request complete. 26/07/2015 19:46:33 target is up to date 26/07/2015 19:46:33 Update complete: target=launcher 26/07/2015 19:46:33 Obtain patch information. target: "client"... 26/07/2015 19:46:33 Create update work folder: path="C:\Games\World_of_Warships\UpdatesData\client" 26/07/2015 19:46:33 Try access patch work folder: path="C:\Games\World_of_Warships\UpdatesData\client" 26/07/2015 19:46:33 patch is available. version_from: 0.unknown, version_to: 40.105823 26/07/2015 19:46:33 patch file. name: "wows_40.103115_client.patch", size: 3105783438 26/07/2015 19:46:33 patch file. name: "wows_40.103116_40.103115_client.patch", size: 1487947994 26/07/2015 19:46:33 patch file. name: "wows_40.103886_40.103116_client.patch", size: 37739650 26/07/2015 19:46:33 patch file. name: "wows_40.103887_40.103886_client.patch", size: 2224 26/07/2015 19:46:33 patch file. name: "wows_40.105234_40.103887_client.patch", size: 33520274 26/07/2015 19:46:33 patch file. name: "wows_40.105823_40.105234_client.patch", size: 230571882 26/07/2015 19:46:33 send http request. url: "http://update.worldofwarships.eu?target=client&client_ver=unknown&la..." 26/07/2015 19:46:34 http request complete. 26/07/2015 19:46:34 patch is available. version_from: 0.unknown, version_to: 40.105823 26/07/2015 19:46:34 patch file. name: "wows_40.103115_client.patch", size: 3105783438 26/07/2015 19:46:34 patch file. name: "wows_40.103116_40.103115_client.patch", size: 1487947994 26/07/2015 19:46:34 patch file. name: "wows_40.103886_40.103116_client.patch", size: 37739650 26/07/2015 19:46:34 patch file. name: "wows_40.103887_40.103886_client.patch", size: 2224 26/07/2015 19:46:34 patch file. name: "wows_40.105234_40.103887_client.patch", size: 33520274 26/07/2015 19:46:34 patch file. name: "wows_40.105823_40.105234_client.patch", size: 230571882 26/07/2015 19:46:34 Getting torrent files via http... 26/07/2015 19:46:34 send http request(attempt: 1). url: "http://wg.gcdn.co/wows_a/eu/patches/4.0_QRWpTV0q/wows_40.103115_client.patch..." 26/07/2015 19:46:34 http request complete. 26/07/2015 19:46:34 torrent file created. name: "wows_40.103115_client.patch.torrent" 26/07/2015 19:46:34 send http request(attempt: 1). url: "http://wg.gcdn.co/wows_a/eu/patches/4.0_QRWpTV0q/wows_40.103116_40.103115_cl..." 26/07/2015 19:46:34 http request complete. 26/07/2015 19:46:34 torrent file created. name: "wows_40.103116_40.103115_client.patch.torrent" 26/07/2015 19:46:34 Getting patch files via ptp... 26/07/2015 19:46:34 Initializing P2P session, extensions=true 26/07/2015 19:47:55 ERROR: Unexpected exception: code=EXCEPTION_ACCESS_VIOLATION flags=0 addr=0 26/07/2015 19:48:06 restart launcher: cmd="-restart" --- snip ---
The client makes extensive use of I/O Completion Ports (IOCP) with a considerable number of worker threads (thread pool) for servicing them.
Although the crash occurs kind of randomly, the crash site seems not.
--- snip --- ... 00556EAB 8B4D 00 MOV ECX,DWORD PTR SS:[EBP] 00556EAE F7D9 NEG ECX 00556EB0 1BC9 SBB ECX,ECX 00556EB2 F7C1 70E64100 TEST ECX,41E670 00556EB8 0F84 9C000000 JE WoWSLaun.00556F5A 00556EBE 8D5424 34 LEA EDX,DWORD PTR SS:[ESP+34] 00556EC2 52 PUSH EDX 00556EC3 8D8E 4C020000 LEA ECX,DWORD PTR DS:[ESI+24C] 00556EC9 E8 92C5F4FF CALL WoWSLaun.?address@endpoint@detail@ip@asio@boost@@QB 00556ECE 837C24 34 01 CMP DWORD PTR SS:[ESP+34],1 00556ED3 0F94C0 SETE AL 00556ED6 0FB6C8 MOVZX ECX,AL 00556ED9 51 PUSH ECX 00556EDA 57 PUSH EDI 00556EDB 8D4E 48 LEA ECX,DWORD PTR DS:[ESI+48] 00556EDE E8 6DBCFFFF CALL WoWSLaun.00552B50 00556EE3 8B16 MOV EDX,DWORD PTR DS:[ESI] 00556EE5 8B42 70 MOV EAX,DWORD PTR DS:[EDX+70] 00556EE8 57 PUSH EDI 00556EE9 55 PUSH EBP 00556EEA 8BCE MOV ECX,ESI 00556EEC FFD0 CALL EAX ; NULL -> *boom* 00556EEE 8B16 MOV EDX,DWORD PTR DS:[ESI] 00556EF0 8B42 1C MOV EAX,DWORD PTR DS:[EDX+1C] 00556EF3 6A 00 PUSH 0 00556EF5 55 PUSH EBP 00556EF6 8BCE MOV ECX,ESI 00556EF8 FFD0 CALL EAX 00556EFA 8A86 B4030000 MOV AL,BYTE PTR DS:[ESI+3B4] ... --- snip ---
I partially reconstructed the call chain for the crash site:
--- snip --- <crash site> ... <5-7 unknown call frames in between> ... WoWSLaun.private: unsigned int __thiscall boost::asio::detail::win_iocp_io_service::do_one(BOOL,class boost::system::error_code &) ... WoWSLaun.public: unsigned int __thiscall boost::asio::detail::win_iocp_io_service::run(class boost::system::error_code &) .. WoWSLaun.public: unsigned int __thiscall boost::asio::io_service::run(class boost::system::error_code &) ... WoWSLaun.unsigned int __stdcall boost::asio::detail::win_thread_function(void *) --- snip ---
I found some hints in the launcher about the Boost library version used:
--- snip --- e:\work\5c6ecc6fb8b7976a\libraries\boost_1_54_0\boost/exception/detail/exception_ptr.hpp class boost::exception_ptr __cdecl boost::exception_detail::get_static_exception_object<struct boost::exception_detail::bad_alloc_>(void) - e:\work\5c6ecc6fb8b7976a\libraries\boost_1_54_0\boost/exception/detail/exception_ptr.hpp ... --- snip ---
Which leads to:
http://www.boost.org/doc/libs/1_54_0/boost/asio/detail/impl/win_iocp_io_serv...
There is a number of internal calls in between the crash site and Boost IOCP code ('op->complete()' -> 'win_iocp_operation' + function pointer call hierarchy).
Debugging/relay tracing a problem which seems to occur at random times in a multi-Gigabyte download, also requiring high download speeds is not really funny :|
Anyway, it's now documented here for reference.
It would be interesting to know if this torrent download problem occurs on Windows too, albeit much less frequent. Reading up some forums I got the impression...
$ sha1sum WoWS_internet_install_eu.exe e9d3fcc8d4d8a2a88678fa75840d4e76a71b7977 WoWS_internet_install_eu.exe
$ du -sh WoWS_internet_install_eu.exe 6.7M WoWS_internet_install_eu.exe
$ wine --version wine-1.7.47-196-g4e6e9a1
Regards