Files

174 lines
5.0 KiB
C

// 00142440 (anonymous_namespace)::pool::free
/* (anonymous namespace)::pool::free(void*) [clone .constprop.0] */
void (anonymous_namespace)::pool::free(void *param_1)
{
long lVar1;
long *plVar2;
long *plVar3;
long lVar4;
long lVar5;
int iVar6;
undefined8 *puVar7;
undefined8 extraout_RAX;
long *plVar8;
long *plVar9;
long extraout_RDX;
long *plVar10;
undefined1 *this;
long *plVar11;
long lVar12;
this = emergency_pool;
iVar6 = pthread_mutex_lock((pthread_mutex_t *)emergency_pool);
if (iVar6 != 0) {
__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error((__concurrence_lock_error *)this)
;
if (extraout_RDX != -1) {
/* WARNING: Subroutine does not return */
_Unwind_Resume(extraout_RAX);
}
/* WARNING: Subroutine does not return */
__cxa_call_unexpected();
}
lVar1 = (long)param_1 + -0x10;
if (emergency_pool._40_8_ != 0) {
lVar12 = *(long *)((long)param_1 + -0x10);
plVar3 = (long *)(lVar1 + lVar12);
if ((ulong)emergency_pool._40_8_ <= plVar3) {
plVar10 = *(long **)(emergency_pool._40_8_ + 8);
if ((long *)emergency_pool._40_8_ == plVar3) {
lVar4 = *(long *)emergency_pool._40_8_;
*(long **)((long)param_1 + -8) = plVar10;
*(long *)((long)param_1 + -0x10) = lVar12 + lVar4;
emergency_pool._40_8_ = lVar1;
}
else {
plVar11 = (long *)(emergency_pool + 0x28);
plVar9 = (long *)emergency_pool._40_8_;
if (plVar10 == (long *)0x0) {
LAB_001424cc:
lVar5 = *plVar9;
lVar4 = (long)plVar9 + lVar5;
}
else {
do {
plVar8 = plVar9;
if (plVar10 <= plVar3) {
if (plVar3 == plVar10) {
lVar12 = lVar12 + *plVar3;
plVar8[1] = plVar3[1];
}
plVar9 = (long *)*plVar11;
goto LAB_001424cc;
}
plVar2 = plVar10 + 1;
plVar11 = plVar8 + 1;
plVar9 = plVar10;
plVar10 = (long *)*plVar2;
} while ((long *)*plVar2 != (long *)0x0);
plVar9 = (long *)plVar8[1];
lVar5 = *plVar9;
lVar4 = (long)plVar9 + lVar5;
}
if (lVar1 == lVar4) {
*plVar9 = lVar12 + lVar5;
}
else {
lVar4 = plVar9[1];
*(long *)((long)param_1 + -0x10) = lVar12;
*(long *)((long)param_1 + -8) = lVar4;
*(long *)(*plVar11 + 8) = lVar1;
}
}
goto LAB_001424fb;
}
}
*(undefined8 *)((long)param_1 + -8) = emergency_pool._40_8_;
emergency_pool._40_8_ = lVar1;
LAB_001424fb:
iVar6 = pthread_mutex_unlock((pthread_mutex_t *)emergency_pool);
if (iVar6 == 0) {
return;
}
puVar7 = (undefined8 *)__cxa_allocate_exception(8);
*puVar7 = &__gnu_cxx::__concurrence_unlock_error::vftable;
/* WARNING: Subroutine does not return */
__cxa_throw(puVar7,&__gnu_cxx::__concurrence_unlock_error::typeinfo,
__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error);
}
// 00142570 (anonymous_namespace)::pool::allocate
/* (anonymous namespace)::pool::allocate(unsigned long) [clone .constprop.0] */
ulong * (anonymous_namespace)::pool::allocate(ulong param_1)
{
ulong *puVar1;
int iVar2;
undefined8 *puVar3;
ulong uVar4;
long lVar5;
ulong uVar6;
ulong *puVar7;
ulong *puVar8;
undefined1 *this;
ulong *puVar9;
this = emergency_pool;
iVar2 = pthread_mutex_lock((pthread_mutex_t *)emergency_pool);
if (iVar2 == 0) {
lVar5 = param_1 + 0x10;
if (0xffffffffffffffef < param_1) {
lVar5 = 0x10;
}
uVar6 = lVar5 + 0xfU & 0xfffffffffffffff0;
puVar9 = (ulong *)0x0;
if (emergency_pool._40_8_ != 0) {
puVar8 = (ulong *)(emergency_pool + 0x28);
puVar7 = (ulong *)emergency_pool._40_8_;
do {
puVar1 = (ulong *)puVar7[1];
if (uVar6 <= *puVar7) {
uVar4 = *puVar7 - uVar6;
if (uVar4 < 0x10) {
*puVar8 = (ulong)puVar1;
}
else {
puVar9 = (ulong *)((long)puVar7 + uVar6);
puVar9[1] = (ulong)puVar1;
puVar7 = (ulong *)*puVar8;
*puVar9 = uVar4;
*puVar7 = uVar6;
*puVar8 = (ulong)puVar9;
}
puVar9 = puVar7 + 2;
break;
}
puVar8 = puVar7 + 1;
puVar9 = (ulong *)0x0;
puVar7 = puVar1;
} while (puVar1 != (ulong *)0x0);
}
iVar2 = pthread_mutex_unlock((pthread_mutex_t *)emergency_pool);
if (iVar2 == 0) {
return puVar9;
}
}
else {
__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error((__concurrence_lock_error *)this)
;
}
puVar3 = (undefined8 *)__cxa_allocate_exception(8);
*puVar3 = &__gnu_cxx::__concurrence_unlock_error::vftable;
/* WARNING: Subroutine does not return */
__cxa_throw(puVar3,&__gnu_cxx::__concurrence_unlock_error::typeinfo,
__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error);
}