Quote:
Originally Posted by SHUFEN.jp
We fixed this problem for Windows, since 4 years ago.
Concretely, It is able via CParticleSystemDefinition::Uncache and CUtlSymbolTable::RemoveAll.
|
Uncache useless i like understand, and not exist on windows is well, now fix works well on any platform
I think only destrucor and clear tables is the good and simple solution
PHP Code:
int __cdecl CParticleSystemDictionary::~CParticleSystemDictionary(CParticleSystemDictionary *this)
{
int v1; // eax
bool v2; // zf
bool v3; // sf
int v4; // eax
int v5; // esi
void *v6; // ebx
int v7; // edx
int v8; // eax
int v9; // eax
int v11; // [esp+1Ch] [ebp-1Ch]
v1 = *((_DWORD *)this + 22);
v2 = v1 == 0;
v3 = v1 < 0;
v11 = *((_DWORD *)this + 22);
v4 = *((_DWORD *)this + 19);
if ( !v3 && !v2 )
{
v5 = 0;
do
{
v6 = *(void **)(v4 + 4 * v5);
if ( v6 )
{
CParticleSystemDefinition::~CParticleSystemDefinition(*(CParticleSystemDefinition ****)(v4 + 4 * v5));
operator delete(v6);
v4 = *((_DWORD *)this + 19);
}
++v5;
}
while ( v5 != v11 );
}
v7 = *((_DWORD *)this + 21);
*((_DWORD *)this + 22) = 0;
if ( v7 >= 0 )
{
if ( v4 )
{
(*(void (__cdecl **)(_DWORD, int))(*g_pMemAlloc + 8))(g_pMemAlloc, v4);
*((_DWORD *)this + 19) = 0;
}
*((_DWORD *)this + 20) = 0;
v4 = 0;
}
*((_DWORD *)this + 23) = v4;
CUtlMemory<CParticleSystemDefinition *,int>::~CUtlMemory((int *)this + 19);
CUtlSymbolTable::~CUtlSymbolTable((CParticleSystemDictionary *)((char *)this + 20));
v8 = *((_DWORD *)this + 2);
*((_DWORD *)this + 3) = 0;
v3 = v8 < 0;
v9 = *(_DWORD *)this;
if ( !v3 )
{
if ( v9 )
{
(*(void (__cdecl **)(_DWORD, int))(*g_pMemAlloc + 8))(g_pMemAlloc, *(_DWORD *)this);
*(_DWORD *)this = 0;
}
*((_DWORD *)this + 1) = 0;
v9 = 0;
}
*((_DWORD *)this + 4) = v9;
return CUtlMemory<CParticleSystemDefinition *,int>::~CUtlMemory((int *)this);
}
__________________