Closed cravenge closed 3 years ago
shqke/impactfix#2
Thanks for the report!
They are no longer random but on a specific scenario this time and it's when human players and/or bots respawn in rescue closets. Here's the crash log:
0 0x87dd00 1 teamcollision.ext.2.l4d2.dll + 0x23a0 2 server.dll + 0x20b94e 3 engine.dll + 0x179d46 4 server.dll + 0x1aced3 5 server.dll + 0x1ad152 6 server.dll + 0x1acae7 7 vstdlib.dll + 0x883a 8 vstdlib.dll + 0xad9d 9 tier0.dll + 0xdb0d 10 tier0.dll + 0x1faa8 11 tier0.dll + 0x1fb32 12 kernel32.dll!BaseThreadInitThunk + 0x19 13 ntdll.dll!__RtlUserThreadStart + 0x2f 14 ntdll.dll!_RtlUserThreadStart + 0x1b
Found concurrency issue with CBaseEntity::ShouldCollide and sourcehook apparently not being thread safe, and replaced hooking method with detours. Now there is a very small chance to crash on unloading/loading this extension in the middle of the game, so should be safe.
Let me know if you still have crashes. 😀
The newest version doesn't seem to be problematic now so I can say that it's all working fine. Cheers! 😀
Glad it's resolved, was a tricky one to find. 😀
I never expected it to happen again but ever since I hard restarted my server, it started to act up with the new offset I proposed. Only this time, I can't provide any Accelerator logs since they get stuck at processing indefinitely.
Reverted #2 with #3. Try now.
I still don't get why it wouldn't work even though the offset should have been correct.
I only saw CGameMovement::GetPlayerMins( void )
and CGameMovement::GetPlayerMaxs( void )
between CGameMovement::SetupMovementBounds( CMoveData *pMove )
and CGameMovement::GetMinGroundNormalZ( void )
in Windows binary.
In Linux binary both are past CTerrorGameMovement::PlayerSolidMask(bool brushOnly, CBasePlayer *testPlayer)
, so likely optimized by a compiler.
Extension should now function properly, you can compare result with a video.
Same as impactfix, random crashes occur. SourceMod 1.10 and here's the crash log from Accelerator: