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...

"

ModLoad: 00007ffd`56e30000 00007ffd`56ef4000 C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_3496fbfac7a2d1ba\nvldumdx.dll
ModLoad: 00007ffd`56e30000 00007ffd`56ef4000 C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_3496fbfac7a2d1ba\nvldumdx.dll
ModLoad: 00007ffd`52420000 00007ffd`561b3000 C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_3496fbfac7a2d1ba\nvgpucomp64.dll
ModLoad: 00007ffd`52420000 00007ffd`561b3000 C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_3496fbfac7a2d1ba\nvgpucomp64.dll
ModLoad: 00007ffd`57480000 00007ffd`577e3000 C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_3496fbfac7a2d1ba\Display.NvContainer\NvMessageBus.dll
ModLoad: 00007ffd`57480000 00007ffd`577e3000 C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_3496fbfac7a2d1ba\Display.NvContainer\NvMessageBus.dll
ModLoad: 00007ffd`52260000 00007ffd`5233e000 C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_3496fbfac7a2d1ba\NvMemMapStoragex.dll
ModLoad: 00007ffd`52260000 00007ffd`5233e000 C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_3496fbfac7a2d1ba\NvMemMapStoragex.dll
ModLoad: 00007ffd`4c7d0000 00007ffd`52004000 C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_3496fbfac7a2d1ba\nvwgf2umx.dll
ModLoad: 00007ffd`4c7d0000 00007ffd`52004000 C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_3496fbfac7a2d1ba\nvwgf2umx.dll
Unable to deliver callback, Unable to deliver callback, 3131

Unable to deliver callback, Unable to deliver callback, 3131

Unable to deliver callback, Unable to deliver callback, 3131

Unable to deliver callback, Unable to deliver callback, 3131

Unable to deliver callback, Unable to deliver callback, 3131

Unable to deliver callback, Unable to deliver callback, 3131

Unable to deliver callback, Unable to deliver callback, 3131

Unable to deliver callback, Unable to deliver callback, 3131

Unable to deliver callback, Unable to deliver callback, 3131

Unable to deliver callback, Unable to deliver callback, 3131

ModLoad: 00007ffc`c6420000 00007ffc`c6584000 C:\WINDOWS\SYSTEM32\dxilconv.dll
ModLoad: 00007ffc`c6420000 00007ffc`c6584000 C:\WINDOWS\SYSTEM32\dxilconv.dll
Unable to deliver callback, Unable to deliver callback, 3131

Unable to deliver callback, Unable to deliver callback, 3131

Unable to deliver callback, Unable to deliver callback, 3131

Unable to deliver callback, Unable to deliver callback, 3131

Unable to deliver callback, Unable to deliver callback, 3131

ModLoad: 00007ffd`43290000 00007ffd`436c7000 C:\Program Files\NVIDIA Corporation\NvTelemetry\NvTelemetryAPI64.dll
ModLoad: 00007ffd`43290000 00007ffd`436c7000 C:\Program Files\NVIDIA Corporation\NvTelemetry\NvTelemetryAPI64.dll
Unable to deliver callback, Unable to deliver callback, 3131

nvapi64!nvapi_QueryInterface+0x211c2bnvapi64!nvapi_QueryInterface+0x211c2b:
00007ffd`5eff3bcb 85c0 test eax,eax
:
00007ffd`5eff3bcb 85c0 test eax,eax
0:000> g
0:000> g
Unable to deliver callback, Unable to deliver callback, 3131

Unable to deliver callback, Unable to deliver callback, 3131

ModLoad: 00007ffd`438d0000 00007ffd`4393a000 C:\Program Files\NVIDIA Corporation\NvTelemetry\NvTelemetryBridge64.dll
ModLoad: 00007ffd`438d0000 00007ffd`4393a000 C:\Program Files\NVIDIA Corporation\NvTelemetry\NvTelemetryBridge64.dll
Unable to deliver callback, Unable to deliver callback, 3131

Unable to deliver callback, Unable to deliver callback, 3131

Unable to deliver callback, Unable to deliver callback, 3131


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:
"

0:000> ~0 k
# Child-SP RetAddr Call Site
# Child-SP RetAddr Call Site
00 00 000000b2`bf5fd660 00007ffd`486c3230 sl_common!slGetPluginFunction+0x9534
000000b2`bf5fd660 00007ffd`486c3230 sl_common!slGetPluginFunction+0x9534
01 01 000000b2`bf5fdaa0 00007ffd`486bad96 sl_common!DllMain+0x8400
000000b2`bf5fdaa0 00007ffd`486bad96 sl_common!DllMain+0x8400
02 02 000000b2`bf5fdba0 00007ffd`5d4123e6 sl_common+0x1ad96
000000b2`bf5fdba0 00007ffd`5d4123e6 sl_common+0x1ad96
03 03 000000b2`bf5fdc10 00007ffd`5d4137b7 sl_interposer!vkGetInstanceProcAddr+0x125b6
000000b2`bf5fdc10 00007ffd`5d4137b7 sl_interposer!vkGetInstanceProcAddr+0x125b6
04 04 000000b2`bf5fdea0 00007ffd`5d415564 sl_interposer!vkGetInstanceProcAddr+0x13987
000000b2`bf5fdea0 00007ffd`5d415564 sl_interposer!vkGetInstanceProcAddr+0x13987
05 05 000000b2`bf5fe120 00007ffd`5d3d6157 sl_interposer!vkGetInstanceProcAddr+0x15734
000000b2`bf5fe120 00007ffd`5d3d6157 sl_interposer!vkGetInstanceProcAddr+0x15734
06 06 000000b2`bf5fe5b0 00007ffd`5d3d5ed2 sl_interposer!slInit+0x2a7
000000b2`bf5fe5b0 00007ffd`5d3d5ed2 sl_interposer!slInit+0x2a7
07 07 000000b2`bf5fe620 00007ff6`4b6b68d8 sl_interposer!slInit+0x22
000000b2`bf5fe620 00007ff6`4b6b68d8 sl_interposer!slInit+0x22
08 08 000000b2`bf5fe660 00007ff6`4b6b6ccb PathOfExileSteam+0xed68d8
000000b2`bf5fe660 00007ff6`4b6b6ccb PathOfExileSteam+0xed68d8
09 09 000000b2`bf5fe870 00007ff6`4b7fe6ae PathOfExileSteam+0xed6ccb
000000b2`bf5fe870 00007ff6`4b7fe6ae PathOfExileSteam+0xed6ccb
0a 0a 000000b2`bf5fe9f0 00007ff6`4b64419a PathOfExileSteam+0x101e6ae
000000b2`bf5fe9f0 00007ff6`4b64419a PathOfExileSteam+0x101e6ae
0b 0b 000000b2`bf5fee00 00007ff6`4b5f0ea9 PathOfExileSteam+0xe6419a
000000b2`bf5fee00 00007ff6`4b5f0ea9 PathOfExileSteam+0xe6419a
0c 0c 000000b2`bf5feea0 00007ff6`4b5f3fd1 PathOfExileSteam+0xe10ea9
000000b2`bf5feea0 00007ff6`4b5f3fd1 PathOfExileSteam+0xe10ea9
0d 0d 000000b2`bf5ff030 00007ff6`4b5f0bf6 PathOfExileSteam+0xe13fd1
000000b2`bf5ff030 00007ff6`4b5f0bf6 PathOfExileSteam+0xe13fd1
0e 0e 000000b2`bf5ff1a0 00007ff6`4b6723d6 PathOfExileSteam+0xe10bf6
000000b2`bf5ff1a0 00007ff6`4b6723d6 PathOfExileSteam+0xe10bf6
0f 0f 000000b2`bf5ff350 00007ff6`4b673146 PathOfExileSteam+0xe923d6
000000b2`bf5ff350 00007ff6`4b673146 PathOfExileSteam+0xe923d6
10 10 000000b2`bf5ff5b0 00007ff6`4a8de9d3 PathOfExileSteam+0xe93146
000000b2`bf5ff5b0 00007ff6`4a8de9d3 PathOfExileSteam+0xe93146
11 11 000000b2`bf5ff6e0 00007ff6`4a8df2a6 PathOfExileSteam+0xfe9d3
000000b2`bf5ff6e0 00007ff6`4a8df2a6 PathOfExileSteam+0xfe9d3
12 12 000000b2`bf5ff710 00007ff6`4a8df4e7 PathOfExileSteam+0xff2a6
000000b2`bf5ff710 00007ff6`4a8df4e7 PathOfExileSteam+0xff2a6
13 13 000000b2`bf5ff900 00007ff6`4a8df587 PathOfExileSteam+0xff4e7
000000b2`bf5ff900 00007ff6`4a8df587 PathOfExileSteam+0xff4e7
14 14 000000b2`bf5ff930 00007ff6`4cf8080a PathOfExileSteam+0xff587
000000b2`bf5ff930 00007ff6`4cf8080a PathOfExileSteam+0xff587
15 15 000000b2`bf5ff990 00007ffd`6c03e8d7 PathOfExileSteam+0x27a080a
000000b2`bf5ff990 00007ffd`6c03e8d7 PathOfExileSteam+0x27a080a
16 16 000000b2`bf5ff9d0 00007ffd`6cfcc53c KERNEL32!BaseThreadInitThunk+0x17
000000b2`bf5ff9d0 00007ffd`6cfcc53c KERNEL32!BaseThreadInitThunk+0x17
17 17 000000b2`bf5ffa00 00000000`00000000 ntdll!RtlUserThreadStart+0x2c
000000b2`bf5ffa00 00000000`00000000 ntdll!RtlUserThreadStart+0x2c


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
"
sl_interposer!slInit+0x2a7
- or let's just say sl_interposer as a module (
"
sl_interposer.dll
). 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
"
sl_interposer!slInit
.
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
"
slInit
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:
"
00 sl_common!slGetPluginFunction
06 sl_interposer!slInit
08 PathOfExileSteam+0xed68d8


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
"
CreateDevice
,
"
DestroyDevice
, etc. I strongly believe that since I had some attempts on catching the hang and one of the stack I've got is this:



"


);dv /t /v">0000 00007ffd`67566e2c 00007ffd`67566e2c : 00000001`000000de 00000000`00000000 00000000`00000000 00000000`00000378 : : 00000001`000000de 00000000`00000000 00000000`00000000 00000000`00000378 : dxgi!CD3D12Device::GetDeviceRemovedReasondxgi!CD3D12Device::GetDeviceRemovedReason
27
28 ].SwitchTo();dv /t /v">0101 00007ffd`674de89b 00007ffd`674de89b : 00000210`5371b010 000000b2`c65fd988 00000000`00000001 00000000`00000000 : : 00000210`5371b010 000000b2`c65fd988 00000000`00000001 00000000`00000000 : dxgi!CD3D12Device::PresentExtendeddxgi!CD3D12Device::PresentExtended++0x300x30
29
30 ].SwitchTo();dv /t /v">0202 00007ffd`674dc669 00007ffd`674dc669 : 00000000`00000000 00000210`52b6cd60 00000000`00000000 00007ffd`00000222 : : 00000000`00000000 00000210`52b6cd60 00000000`00000000 00007ffd`00000222 : dxgi!CFlipPresentToDWM<CDXGISwapChainWrapper>::FlipPresentCoredxgi!CFlipPresentToDWM<CD
XGISwapChainWrapper>::FlipPresentCore++0x8cb0x8cb
31
32 ].SwitchTo();dv /t /v">0303 00007ffd`674d0857 00007ffd`674d0857 : 00000000`00000000 00000000`00000000 00000212`df046100 00000000`00000000 : : 00000000`00000000 00000000`00000000 00000212`df046100 00000000`00000000 : dxgi!CDXGISwapChain::FlipPresentToDWMdxgi!CDXGISwapChain::FlipPresentToDWM++0x6590x659
33
34 ].SwitchTo();dv /t /v">0404 00007ffd`674c3674 00007ffd`674c3674 : 00000210`52b6cdb8 00000000`00000000 00000000`00000000 00000000`00000000 : : 00000210`52b6cdb8 00000000`00000000 00000000`00000000 00000000`00000000 : dxgi!CDXGISwapChain::PresentImplCoredxgi!CDXGISwapChain::PresentImplCore++0x7070x707
35
36 ].SwitchTo();dv /t /v">0505 00007ffd`674c2e1a 00007ffd`674c2e1a : 00007ffd`00000000 000000b2`c65ff268 00000210`52b6cd60 00007ffd`4874fb10 : : 00007ffd`00000000 000000b2`c65ff268 00000210`52b6cd60 00007ffd`4874fb10 : dxgi!CDXGISwapChain::PresentImpldxgi!CDXGISwapChain::PresentImpl++0x1040x104
37
38 ].SwitchTo();dv /t /v">0606 00007ffd`4774527f 00007ffd`4774527f : 00000213`a46ef1a0 00000000`00000000 00000000`00000000 00007ffd`486ce4bc : : 00000213`a46ef1a0 00000000`00000000 00000000`00000000 00007ffd`486ce4bc : dxgi!CDXGISwapChain::Presentdxgi!CDXGISwapChain::Present++0x17a0x17a
39
40 ].SwitchTo();dv /t /v">0707 00007ffd`5d3f7668 00007ffd`5d3f7668 : 00000213`a46ef1a0 00000000`00000200 00000000`00000004 00007ffd`47812208 : : 00000213`a46ef1a0 00000000`00000200 00000000`00000004 00007ffd`47812208 : gameoverlayrenderer64!OverlayHookD3D3gameoverlayrenderer64!OverlayHookD3D3++0x140bf0x14
0bf
41
42 ].SwitchTo();dv /t /v">0808 00007ffd`5d3f7583 00007ffd`5d3f7583 : 00007ffd`5d44e870 4c37f963`e268b3dc 00000000`00000000 000002e2`a2514600 : : 00007ffd`5d44e870 4c37f963`e268b3dc 00000000`00000000 000002e2`a2514600 : sl_interposer!DXGIGetDebugInterface1sl_interposer!DXGIGetDebugInterface1++0x22c80x22c8
43
44 ].SwitchTo();dv /t /v">0909 00007ff6`4b7e1d2a 00007ff6`4b7e1d2a : 00000214`9059ef10 00000000`00000001 0000008c`4b08448c 00007ff6`4a913928 : : 00000214`9059ef10 00000000`00000001 0000008c`4b08448c 00007ff6`4a913928 : sl_interposer!DXGIGetDebugInterface1sl_interposer!DXGIGetDebugInterface1++0x21e30x21e3
45
46 ].SwitchTo();dv /t /v">0a0a 00007ff6`4b802066 00007ff6`4b802066 : 000002e2`d5c18d90 000002e2`a2514600 0000008c`4b08448c 00007ff6`4b8028b9 : : 000002e2`d5c18d90 000002e2`a2514600 0000008c`4b08448c 00007ff6`4b8028b9 : PathOfExileSteamPathOfExileSteam++0x1001d2a0x1001d2a
47
48 ].SwitchTo();dv /t /v">0b0b 00007ff6`4b6728b8 00007ff6`4b6728b8 : 00007ff6`4e80e9e0 00007ff6`4e7da458 00000000`00000001 0000008c`4b08448c : : 00007ff6`4e80e9e0 00007ff6`4e7da458 00000000`00000001 0000008c`4b08448c : PathOfExileSteamPathOfExileSteam++0x10220660x1022066
49
50 ].SwitchTo();dv /t /v">0c0c 00007ff6`4b5c80cc 00007ff6`4b5c80cc : 0000057a`ee52ad7e 000002e2`a209fe18 00000000`00000001 000002e2`a21a4888 : : 0000057a`ee52ad7e 000002e2`a209fe18 00000000`00000001 000002e2`a21a4888 : PathOfExileSteamPathOfExileSteam++0xe928b80xe928b8
51
52 ].SwitchTo();dv /t /v">0d0d 00007ff6`4b5c80f3 00007ff6`4b5c80f3 : 000002e2`a209fe18 000002e2`a209fe18 00000000`00000001 000002e2`a2079058 : : 000002e2`a209fe18 000002e2`a209fe18 00000000`00000001 000002e2`a2079058 : PathOfExileSteamPathOfExileSteam++0xde80cc0xde80cc
53
54 ].SwitchTo();dv /t /v">0e0e 00007ff6`4b5c80f3 00007ff6`4b5c80f3 : 000002e2`a209e108 000002e2`a209e108 00000000`00000001 000002e2`a2078fb8 : : 000002e2`a209e108 000002e2`a209e108 00000000`00000001 000002e2`a2078fb8 : PathOfExileSteamPathOfExileSteam++0xde80f30xde80f3
55
56 ].SwitchTo();dv /t /v">0f0f 00007ff6`4b5c80f3 00007ff6`4b5c80f3 : 000002e2`c7fb0650 000002e2`c7fb0650 000002e2`a2078478 000002e2`a2078f18 : : 000002e2`c7fb0650 000002e2`c7fb0650 000002e2`a2078478 000002e2`a2078f18 : PathOfExileSteamPathOfExileSteam++0xde80f30xde80f3


Long story short : I've put a custom conditional bp with a message:

'--- GPU DEVICE REMOVED ---'
'--- GPU DEVICE REMOVED ---'

and seeing things like:
"
sl_interposer!DXGIGetDebugInterface1sl_interposer!DXGIGetDebugInterface1++0x21e3

"
dxgi!CD3D12Device::GetDeviceRemovedReason

"
ntdll!RtlUserThreadStart

makes me think that this is the reinit process/flow.

As a conclusion :
"
Module: sl_interposer.dll / sl_common.dll

Failure Point: sl_common!slGetPluginFunction+0x9534

Error Spam: Unable to deliver callback, 3131 (Message loop is choked).

The Fix ( just my intuition from reverse engineering ): slInit and any associated Streamline feature resolution should be moved to a background worker thread, or the Main Thread must continue to call PeekMessage/DispatchMessage while waiting for the Streamline handshake to complete.


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.



Last bumped on Jan 26, 2026, 5:28:19 PM

Report Forum Post

Report Account:

Report Type

Additional Info