From fbfb0ffbf24b7ea2630b4b3caee63d09964da75b Mon Sep 17 00:00:00 2001 From: smatz Date: Wed, 9 Feb 2011 18:55:51 +0000 Subject: (svn r22041) -Codechange: add a check that we called PoolItem::CanAllocateItem() before actually allocating it --- src/core/pool_func.hpp | 4 ++++ src/core/pool_type.hpp | 10 ++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) (limited to 'src/core') diff --git a/src/core/pool_func.hpp b/src/core/pool_func.hpp index 2f87d3de2..299aee86c 100644 --- a/src/core/pool_func.hpp +++ b/src/core/pool_func.hpp @@ -123,6 +123,10 @@ DEFINE_POOL_METHOD(void *)::GetNew(size_t size) { size_t index = this->FindFirstFree(); +#ifdef OTTD_ASSERT + assert(this->checked != 0); + this->checked--; +#endif /* OTTD_ASSERT */ if (index == NO_FREE_ITEM) { error("%s: no more free items", this->name); } diff --git a/src/core/pool_type.hpp b/src/core/pool_type.hpp index 49876976f..395aa8438 100644 --- a/src/core/pool_type.hpp +++ b/src/core/pool_type.hpp @@ -32,7 +32,9 @@ struct Pool { size_t first_free; ///< No item with index lower than this is free (doesn't say anything about this one!) size_t first_unused; ///< This and all higher indexes are free (doesn't say anything about first_unused-1 !) size_t items; ///< Number of used indexes (non-NULL) - +#ifdef OTTD_ASSERT + size_t checked; ///< Number of items we checked for +#endif /* OTTD_ASSERT */ bool cleaning; ///< True if cleaning pool (deleting all items) Titem **data; ///< Pointer to array of pointers to Titem @@ -69,7 +71,11 @@ struct Pool { */ FORCEINLINE bool CanAllocate(size_t n = 1) { - return this->items <= Tmax_size - n; + bool ret = this->items <= Tmax_size - n; +#ifdef OTTD_ASSERT + this->checked = ret ? n : 0; +#endif /* OTTD_ASSERT */ + return ret; } /** -- cgit v1.2.3-54-g00ecf