mirror of
https://github.com/asmjit/asmjit.git
synced 2025-12-18 13:04:36 +03:00
[bug] Fixed JitAllocator::reset() when it's empty
This commit is contained in:
@@ -744,6 +744,9 @@ void JitAllocator::reset(ResetPolicy resetPolicy) noexcept {
|
|||||||
JitAllocatorPool& pool = impl->pools[poolId];
|
JitAllocatorPool& pool = impl->pools[poolId];
|
||||||
JitAllocatorBlock* block = pool.blocks.first();
|
JitAllocatorBlock* block = pool.blocks.first();
|
||||||
|
|
||||||
|
pool.reset();
|
||||||
|
|
||||||
|
if (block) {
|
||||||
JitAllocatorBlock* blockToKeep = nullptr;
|
JitAllocatorBlock* blockToKeep = nullptr;
|
||||||
if (resetPolicy != ResetPolicy::kHard && uint32_t(impl->options & JitAllocatorOptions::kImmediateRelease) == 0) {
|
if (resetPolicy != ResetPolicy::kHard && uint32_t(impl->options & JitAllocatorOptions::kImmediateRelease) == 0) {
|
||||||
blockToKeep = block;
|
blockToKeep = block;
|
||||||
@@ -756,8 +759,6 @@ void JitAllocator::reset(ResetPolicy resetPolicy) noexcept {
|
|||||||
block = next;
|
block = next;
|
||||||
}
|
}
|
||||||
|
|
||||||
pool.reset();
|
|
||||||
|
|
||||||
if (blockToKeep) {
|
if (blockToKeep) {
|
||||||
blockToKeep->_listNodes[0] = nullptr;
|
blockToKeep->_listNodes[0] = nullptr;
|
||||||
blockToKeep->_listNodes[1] = nullptr;
|
blockToKeep->_listNodes[1] = nullptr;
|
||||||
@@ -766,6 +767,7 @@ void JitAllocator::reset(ResetPolicy resetPolicy) noexcept {
|
|||||||
pool.emptyBlockCount = 1;
|
pool.emptyBlockCount = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// JitAllocator - Statistics
|
// JitAllocator - Statistics
|
||||||
@@ -1387,6 +1389,11 @@ static void BitVectorRangeIterator_testRandom(Random& rnd, size_t count) noexcep
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_jit_allocator_reset_empty() noexcept {
|
||||||
|
JitAllocator allocator;
|
||||||
|
allocator.reset(ResetPolicy::kSoft);
|
||||||
|
}
|
||||||
|
|
||||||
static void test_jit_allocator_alloc_release() noexcept {
|
static void test_jit_allocator_alloc_release() noexcept {
|
||||||
size_t kCount = BrokenAPI::hasArg("--quick") ? 20000 : 100000;
|
size_t kCount = BrokenAPI::hasArg("--quick") ? 20000 : 100000;
|
||||||
|
|
||||||
@@ -1553,6 +1560,7 @@ static void test_jit_allocator_query() noexcept {
|
|||||||
}
|
}
|
||||||
|
|
||||||
UNIT(jit_allocator) {
|
UNIT(jit_allocator) {
|
||||||
|
test_jit_allocator_reset_empty();
|
||||||
test_jit_allocator_alloc_release();
|
test_jit_allocator_alloc_release();
|
||||||
test_jit_allocator_query();
|
test_jit_allocator_query();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user