[Bug 43774] New: Chromium-based browser engine (CEFv3) used by several games crashes on shutdown (World of Warships 0.6.x)
wine-bugs at winehq.org
wine-bugs at winehq.org
Sun Sep 24 07:49:25 CDT 2017
https://bugs.winehq.org/show_bug.cgi?id=43774
Bug ID: 43774
Summary: Chromium-based browser engine (CEFv3) used by several
games crashes on shutdown (World of Warships 0.6.x)
Product: Wine
Version: 2.17
Hardware: x86-64
OS: Linux
Status: NEW
Severity: normal
Priority: P2
Component: ntdll
Assignee: wine-bugs at winehq.org
Reporter: focht at gmx.net
Distribution: ---
Hello folks
to track https://source.winehq.org/patches/data/137313
--- quote ---
ntdll: Do not queue a completion status if pipe ops fail synchronously.
This fixes random crashes when exiting Chromium or shutting down CEF.
It is similar to 7a1142035d7ee04839417176ff93fd0953e2a4e1, just for pipes.
--- quote ---
Can be reproduced with games that use Chromium/CEFv3 as in-game browser, for
example World of Warships 0.6.x.
In World of Warships 0.6.x switch multiple times between "[Port]" and "[CLAN]"
tabs (CLAN page uses in-game browser) to force a crash.
With the patch applied the crash disappears.
NOTE: Currently Wine-Staging must be used for reproduce because there are still
some patches missing from vanilla Wine
(https://github.com/wine-compholio/wine-staging/tree/master/patches/kernel32-Named_Pipe
etc.)
--- snip ---
0x11fc9c62: int $3
Modules:
Module Address Debug info Name (186 modules)
PE 400000- 514000 Deferred cef_browser_process
PE 1c20000- 1c94000 Deferred chrome_elf
PE 10000000-14113000 Export libcef
ELF 7a800000-7a942000 Deferred opengl32<elf>
\-PE 7a840000-7a942000 \ opengl32
ELF 7b400000-7b7f5000 Deferred kernel32<elf>
\-PE 7b420000-7b7f5000 \ kernel32
ELF 7bc00000-7bd15000 Dwarf ntdll<elf>
\-PE 7bc30000-7bd15000 \ ntdll
ELF 7c000000-7c004000 Deferred <wine-loader>
...
0000015f (D) C:\Games\World_of_Warships\cef\cef_browser_process.exe
[C:/Games/World_of_Warships/cef/cef_browser_process.exe
--user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,
like Gecko) Chrome/39.0.2171.95 Safari/537.36 WOWS/1.0"
--cache-path="C:/Games/World_of_Warships/profile/cef_cache" --disable-gpu
--disable-gpu-compositing --enable-begin-frame-scheduling --max-frame-rate=30
--log-severity="info" --accept-language-list="en" --id=138]
000001cb 0
...
00000172 0 <==
...
--- snip ---
Disassembly:
--- snip ---
...
11FC9C0D 50 PUSH EAX
11FC9C0E 6A 60 PUSH 60
; ASCII "y:\work\cef3_git\chromium\src\mojo\edk\system\channel_win.cc"
11FC9C10 68 E86E6913 PUSH libcef.13696EE8
11FC9C15 68 286F6913 PUSH libcef.13696F28 ; ASCII "ShutDownImpl"
11FC9C1A 8D4D E0 LEA ECX,DWORD PTR SS:[EBP-20]
11FC9C1D E8 1E1576FE CALL libcef.1072B140
11FC9C22 50 PUSH EAX
11FC9C23 8BCE MOV ECX,ESI
11FC9C25 E8 668176FE CALL libcef.10731D90
11FC9C2A 8D4D FC LEA ECX,DWORD PTR SS:[EBP-4]
11FC9C2D E8 CE290DFE CALL libcef.1009C600
11FC9C32 5E POP ESI
11FC9C33 8BE5 MOV ESP,EBP
11FC9C35 5D POP EBP
11FC9C36 C3 RETN
11FC9C37 55 PUSH EBP
11FC9C38 8BEC MOV EBP,ESP
11FC9C3A 83EC 0C SUB ESP,0C
11FC9C3D 53 PUSH EBX
11FC9C3E 8BD9 MOV EBX,ECX
11FC9C40 8BD3 MOV EDX,EBX
11FC9C42 F7DA NEG EDX
11FC9C44 56 PUSH ESI
11FC9C45 8D43 10 LEA EAX,DWORD PTR DS:[EBX+10]
11FC9C48 1BD2 SBB EDX,EDX
11FC9C4A 23D0 AND EDX,EAX
11FC9C4C 57 PUSH EDI
11FC9C4D 52 PUSH EDX
11FC9C4E E8 1D7A79FE CALL libcef.10761670
11FC9C53 8BC8 MOV ECX,EAX
11FC9C55 E8 367B79FE CALL libcef.10761790
11FC9C5A 8D7B 1C LEA EDI,DWORD PTR DS:[EBX+1C]
11FC9C5D 833F FF CMP DWORD PTR DS:[EDI],-1
11FC9C60 75 01 JNZ SHORT libcef.11FC9C63
11FC9C62 CC INT3 ; triggers CHECK(handle_.is_valid());
11FC9C63 FF37 PUSH DWORD PTR DS:[EDI]
11FC9C65 FF15 E8043513 CALL DWORD PTR DS:[<&KERNEL32.CancelIo>]
11FC9C6B 80BB 85000000 00 CMP BYTE PTR DS:[EBX+85],0
11FC9C72 74 0B JE SHORT libcef.11FC9C7F
...
--- snip ---
https://chromium.googlesource.com/chromium/src/+/refs/heads/master/mojo/edk/system/channel_win.cc
--- snip ---
void ShutDownOnIOThread() {
base::MessageLoop::current()->RemoveDestructionObserver(this);
// BUG(crbug.com/583525): This function is expected to be called once, and
// |handle_| should be valid at this point.
CHECK(handle_.is_valid());
CancelIo(handle_.get().handle);
if (leak_handle_)
ignore_result(handle_.release());
handle_.reset();
// May destroy the |this| if it was the last reference.
self_ = nullptr;
}
--- snip ---
Regards
--
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.
More information about the wine-bugs
mailing list