mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
Fix aligned memalloc singleton
Properly fix the aligned memalloc singleton in the SDK; the implementation now uses a callback based approach for calling the allocator and deallocator.
This commit is contained in:
parent
95316ab1c8
commit
8acfad5556
@ -338,13 +338,13 @@ void Mod_ProcessPakQueue()
|
||||
Mod_PreloadLevelPaks(s_svLevelName.c_str());
|
||||
s_bLevelResourceInitialized = true;
|
||||
}
|
||||
*(_DWORD*)v15 = g_pakLoadApi->LoadAsync(v17, g_pAlignedMemAlloc, 4, 0);
|
||||
*(_DWORD*)v15 = g_pakLoadApi->LoadAsync(v17, AlignedMemAlloc(), 4, 0);
|
||||
|
||||
if (strcmp(v17, "common_mp.rpak") == 0 || strcmp(v17, "common_sp.rpak") == 0 || strcmp(v17, "common_pve.rpak") == 0)
|
||||
g_pakLoadApi->LoadAsync("common_sdk.rpak", g_pAlignedMemAlloc, 4, 0);
|
||||
g_pakLoadApi->LoadAsync("common_sdk.rpak", AlignedMemAlloc(), 4, 0);
|
||||
#ifndef DEDICATED
|
||||
if (strcmp(v17, "ui_mp.rpak") == 0)
|
||||
g_pakLoadApi->LoadAsync("ui_sdk.rpak", g_pAlignedMemAlloc, 4, 0);
|
||||
g_pakLoadApi->LoadAsync("ui_sdk.rpak", AlignedMemAlloc(), 4, 0);
|
||||
#endif // !DEDICATED
|
||||
|
||||
LABEL_37:
|
||||
@ -429,7 +429,7 @@ void Mod_PreloadLevelPaks(const char* pszLevelName)
|
||||
continue;
|
||||
|
||||
snprintf(szPathBuffer, sizeof(szPathBuffer), "%s.rpak", pSubKey->GetName());
|
||||
RPakHandle_t nPakId = g_pakLoadApi->LoadAsync(szPathBuffer, g_pAlignedMemAlloc, 4, 0);
|
||||
RPakHandle_t nPakId = g_pakLoadApi->LoadAsync(szPathBuffer, AlignedMemAlloc(), 4, 0);
|
||||
|
||||
if (nPakId == INVALID_PAK_HANDLE)
|
||||
Error(eDLL_T::ENGINE, NO_ERROR, "%s: unable to load pak '%s' results '%d'\n", __FUNCTION__, szPathBuffer, nPakId);
|
||||
|
@ -1,14 +1,29 @@
|
||||
#ifndef TSLIST_H
|
||||
#define TSLIST_H
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
class CAlignedMemAlloc
|
||||
{
|
||||
public:
|
||||
virtual void* Alloc(size_t nSize) = 0;
|
||||
virtual void Free(void* pMem) = 0;
|
||||
void* Alloc(size_t nSize, size_t nAlignment = 0);
|
||||
void Free(void* pMem);
|
||||
|
||||
private:
|
||||
void* m_pAllocCallback;
|
||||
void* m_pFreeCallback;
|
||||
};
|
||||
|
||||
inline CAlignedMemAlloc* g_pAlignedMemAlloc;
|
||||
extern CAlignedMemAlloc* g_pAlignedMemAlloc;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Singleton aligned memalloc
|
||||
//-----------------------------------------------------------------------------
|
||||
inline CAlignedMemAlloc* AlignedMemAlloc()
|
||||
{
|
||||
return g_pAlignedMemAlloc;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
class VTSListBase : public IDetour
|
||||
|
@ -39,7 +39,7 @@ inline CMemory p_CPakFile_OpenFileOffset; // Offset to inlined 'CPakFile::LoadPa
|
||||
class CPakFile
|
||||
{
|
||||
public:
|
||||
static RPakHandle_t LoadAsync(const char* szPakFileName, CAlignedMemAlloc* pMalloc = g_pAlignedMemAlloc, int nIdx = NULL, bool bUnk = false);
|
||||
static RPakHandle_t LoadAsync(const char* szPakFileName, CAlignedMemAlloc* pMalloc = AlignedMemAlloc(), int nIdx = NULL, bool bUnk = false);
|
||||
static void UnloadPak(RPakHandle_t handle);
|
||||
};
|
||||
|
||||
|
@ -0,0 +1,28 @@
|
||||
//=============================================================================//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================//
|
||||
#include "tier0/tslist.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: alloc aligned memory
|
||||
// Input : nSize -
|
||||
// nPad -
|
||||
// Output : pointer to allocated aligned memory
|
||||
//-----------------------------------------------------------------------------
|
||||
void* CAlignedMemAlloc::Alloc(size_t nSize, size_t nAlignment)
|
||||
{
|
||||
return ((void* (*)(size_t, size_t))m_pAllocCallback)(nSize, nAlignment);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: free aligned memory
|
||||
// Input : pMem -
|
||||
//-----------------------------------------------------------------------------
|
||||
void CAlignedMemAlloc::Free(void* pMem)
|
||||
{
|
||||
((void (*)(void*))m_pFreeCallback)(pMem);
|
||||
}
|
||||
|
||||
CAlignedMemAlloc* g_pAlignedMemAlloc;
|
@ -191,8 +191,8 @@ void CSquirrelVM::CompileModScripts()
|
||||
|
||||
if (rson)
|
||||
{
|
||||
RSON_Free(rson, g_pAlignedMemAlloc);
|
||||
//g_pAlignedMemAlloc->Free(rson); // TODO: fix g_pAlignedMemAlloc and free this properly
|
||||
RSON_Free(rson, AlignedMemAlloc());
|
||||
AlignedMemAlloc()->Free(rson);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user