Counter Strike : Global Offensive Source Code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

48 lines
1.1 KiB

#include "intelglmallocworkaround.h"
#include "mach_override.h"
// memdbgon -must- be the last include file in a .cpp file.
#include "tier0/memdbgon.h"
IntelGLMallocWorkaround* IntelGLMallocWorkaround::s_pWorkaround = NULL;
void *IntelGLMallocWorkaround::ZeroingAlloc(size_t size)
{
// We call into this pointer that resumes the original malloc.
void *memory = s_pWorkaround->m_pfnMallocReentry(size);
if (size < 96)
{
// Since the Intel driver has an issue with a small allocation
// that's left uninitialized, we use memset to ensure it's zero-initialized.
memset(memory, 0, size);
}
return memory;
}
IntelGLMallocWorkaround* IntelGLMallocWorkaround::Get()
{
if (!s_pWorkaround)
{
s_pWorkaround = new IntelGLMallocWorkaround();
}
return s_pWorkaround;
}
bool IntelGLMallocWorkaround::Enable()
{
if ( m_pfnMallocReentry != NULL )
{
return true;
}
mach_error_t error = mach_override_ptr( (void*)&malloc, (const void*)&ZeroingAlloc, (void**)&m_pfnMallocReentry );
if ( error == err_cannot_override )
{
m_pfnMallocReentry = NULL;
return false;
}
return true;
}