Skip to content

Commit 2e25d9e

Browse files
committed
Fixed a crash (race condition triggered when jacking a vehicle)
Thanks to Dutchman101 for tracking down the crash
1 parent a059b76 commit 2e25d9e

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

MTA10/multiplayer_sa/CMultiplayerSA_CrashFixHacks.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1471,6 +1471,42 @@ void _declspec(naked) HOOK_CAnimManager_CreateAnimAssocGroups()
14711471
}
14721472

14731473

1474+
//////////////////////////////////////////////////////////////////////////////////////////
1475+
//
1476+
// Something called from CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask
1477+
//
1478+
// Accessing a temporally not existing vehicle
1479+
// (seems to happen when the driver is slower being thrown out than the jacker enters the vehicle)
1480+
//
1481+
//////////////////////////////////////////////////////////////////////////////////////////
1482+
#define HOOKPOS_CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask 0x6485AC
1483+
#define HOOKSIZE_CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask 6
1484+
DWORD RETURN_CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask = 0x6485B2;
1485+
DWORD RETURN_CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask_Invalid = 0x6485E1;
1486+
void OnMY_CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask()
1487+
{
1488+
LogEvent( 817, "CTaskComplexCarSlowBeDraggedOut", "", "CTaskComplexCarSlowBeDraggedOut race condition" );
1489+
}
1490+
1491+
void _declspec(naked) HOOK_CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask()
1492+
{
1493+
_asm
1494+
{
1495+
test eax, eax
1496+
jz invalid_vehicle
1497+
1498+
mov ecx, [eax+460h]
1499+
jmp RETURN_CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask
1500+
1501+
invalid_vehicle:
1502+
pushad
1503+
call OnMY_CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask
1504+
popad
1505+
jmp RETURN_CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask_Invalid
1506+
}
1507+
}
1508+
1509+
14741510
//////////////////////////////////////////////////////////////////////////////////////////
14751511
//
14761512
// Setup hooks for CrashFixHacks
@@ -1515,6 +1551,7 @@ void CMultiplayerSA::InitHooks_CrashFixHacks ( void )
15151551
EZHookInstallChecked ( CVolumetricShadowMgr_Render );
15161552
EZHookInstallChecked ( CVolumetricShadowMgr_Update );
15171553
EZHookInstallChecked ( CAnimManager_CreateAnimAssocGroups );
1554+
EZHookInstall ( CTaskComplexCarSlowBeDraggedOut_CreateFirstSubTask );
15181555

15191556
// Install train crossing crashfix (the temporary variable is required for the template logic)
15201557
void (*temp)() = HOOK_TrainCrossingBarrierCrashFix<RETURN_CObject_Destructor_TrainCrossing_Check, RETURN_CObject_Destructor_TrainCrossing_Invalid>;

0 commit comments

Comments
 (0)