Old freeze -> Reinit Driver
|
I've investigated this bug a year ago and the fix was something like reinitializing the driver -> the old post : https://www.pathofexile.com/forum/view-thread/3594471/page/553 which seems closed ( you can find my posts here if someone is curious: https://www.pathofexile.com/account/view-posts/IceCool10-6669 ).
I came back and got bored by all of those reinit stuff.... so I fired up windbg and tried to catch the reinit process because one question bothered me: "Why does it happen only in Poe2?". I saw some comments on the closed thread above since I haven't played that much and when I did, I disabled the multithreading from options but I enabled it back because was a bit shitty with the fps in a juiced map. Windbg bugged so everything is duplicated after reinitializing and adding/removing bps and etc. Sorry, I am a lazy person, doing this in my free time and I do not have time to "beautify" it. For what matters idk why I am doing this at all but whatever... " Basically above, you have the log from reinitializaton... After trying for like 1-2 hours I finally got a "hang" - Thank you Abyss :D ( its not really a hang but you get the point ). Main Thread: " Since everything is duplicated ( insert rage here ) I will try to explain shortly maybe someone from GGG can investigate it... Basically the above is the main thread ( you can see the POE2 main module in the stack ) that was running while I was in a map farming abyss. We can also see the "- or let's just say sl_interposer as a module ( "). This is basically NVIDIA Streamline proxy AFAIK. Another thing that caught my eyes was the flooding of "Unable to deliver callback, Unable to deliver callback, 3131" message in windbg. So my intuition tells me something like: The game hangs during the initial graphics handshake. WinDbg reveals a flood of Unable to deliver callback, 3131 errors. Then the Main UI Thread makes a SYNCHRONOUS call to ". Then NVIDIA Streamline attempts to resolve plugin functions which triggers a window message callback (likely for display/adapter verification). Because the Main Thread is the one performing the "call, its Message Pump is blocked. It cannot process the callback it needs to finish the initialization. And this will be a Circular Wait deadlock seeing the frames: " So, if I play the game in single threaded ( there is an option in the game settings ) this doesn't happen. Probably because that would bypass the engine's internal multi-threaded synchronization primitives that are currently "hanging"/"orphaning" the message pump during NVIDIA Streamline handshake ? ( IDK, It's just my intuition ). It's hard for me to believe that the stack above it's in the reinit process since I am not seeing any call to ", ", etc. I strongly believe that since I had some attempts on catching the hang and one of the stack I've got is this: " Long story short : I've put a custom conditional bp with a message: '--- GPU DEVICE REMOVED ---' '--- GPU DEVICE REMOVED ---' and seeing things like: " " " makes me think that this is the reinit process/flow. As a conclusion : " So for me from reverse feels like: The Deadlock: GPU Device is removed/reset (dxgi!CD3D12Device::GetDeviceRemovedReason). Main Thread calls slInit and waits. sl_interposer sends WM_USER+0xC3B (3131) to the HWND. The Main Thread is blocked and cannot pump the message. Infinite Hang. Zuletzt angestoßen am 26.01.2026, 17:28:19
|
|








