summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornemerle <nemerle5@gmail.com>2018-05-17 00:35:47 +0200
committernemerle <nemerle5@gmail.com>2018-05-17 00:35:47 +0200
commit2bbe6144ff4eb6b68b8b06144bca21bffdf1e8b5 (patch)
treebe75a0a379ac6fdd10fd6eb5af0403f1fc6b4516
parent41f79a6f14843406ea3c7f464a899fdc290e4bb0 (diff)
Fix PoolAllocator::resize for too large p_new_size
The code had a subtle signed/unsigned bug - ```cpp if( signed - unsigned < 0) // signed - unsigned is unsigned in c++, so if( unsigned < 0) // and thus the if block will never be executed ``` Thus all the following code would be ran, including unnecessary retries of compacting the pool.
-rw-r--r--core/pool_allocator.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/core/pool_allocator.cpp b/core/pool_allocator.cpp
index 017586b92a..8952314212 100644
--- a/core/pool_allocator.cpp
+++ b/core/pool_allocator.cpp
@@ -359,7 +359,7 @@ Error PoolAllocator::resize(ID p_mem, int p_new_size) {
//p_new_size = align(p_new_size)
int _free = free_mem; // - static_area_size;
- if ((_free + aligned(e->len)) - alloc_size < 0) {
+ if (uint32_t(_free + aligned(e->len)) < alloc_size) {
mt_unlock();
ERR_FAIL_V(ERR_OUT_OF_MEMORY);
};