summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2009-01-09 15:01:15 +0000
committerrubidium <rubidium@openttd.org>2009-01-09 15:01:15 +0000
commit0464e9f864da7b71fdf7b568916596fbb8a614bb (patch)
tree86ecd22a30e9df98841e74d530337206a9a322c9
parent07c5fb2a028dbb97e3c28d267c49131aaba4facb (diff)
downloadopenttd-0464e9f864da7b71fdf7b568916596fbb8a614bb.tar.xz
(svn r14935) -Fix [FS#2498]: the new operator may not return NULL, so don't.
-rw-r--r--src/oldpool.h10
-rw-r--r--src/oldpool_func.h6
2 files changed, 11 insertions, 5 deletions
diff --git a/src/oldpool.h b/src/oldpool.h
index 8396e5de0..5859571b5 100644
--- a/src/oldpool.h
+++ b/src/oldpool.h
@@ -211,6 +211,7 @@ struct PoolItem {
/**
* An overriden version of new that allocates memory on the pool.
* @param size the size of the variable (unused)
+ * @pre CanAllocateItem()
* @return the memory that is 'allocated'
*/
void *operator new(size_t size)
@@ -282,7 +283,8 @@ private:
protected:
/**
* Allocate a pool item; possibly allocate a new block in the pool.
- * @return the allocated pool item (or NULL when the pool is full).
+ * @pre CanAllocateItem()
+ * @return the allocated pool item.
*/
static inline T *AllocateRaw()
{
@@ -292,7 +294,8 @@ protected:
/**
* Allocate a pool item; possibly allocate a new block in the pool.
* @param first the first pool item to start searching
- * @return the allocated pool item (or NULL when the pool is full).
+ * @pre CanAllocateItem()
+ * @return the allocated pool item.
*/
static inline T *AllocateRaw(uint &first)
{
@@ -342,7 +345,8 @@ public:
OldMemoryPool<type> _##name##_pool( \
#name, name##_POOL_MAX_BLOCKS, name##_POOL_BLOCK_SIZE_BITS, sizeof(type), \
PoolNewBlock<type, &_##name##_pool>, PoolCleanBlock<type, &_##name##_pool>); \
- template type *PoolItem<type, type##ID, &_##name##_pool>::AllocateSafeRaw(uint &first);
+ template type *PoolItem<type, type##ID, &_##name##_pool>::AllocateSafeRaw(uint &first); \
+ template bool PoolItem<type, type##ID, &_##name##_pool>::CanAllocateItem(uint count);
#define STATIC_OLD_POOL(name, type, block_size_bits, max_blocks, new_block_proc, clean_block_proc) \
diff --git a/src/oldpool_func.h b/src/oldpool_func.h
index 3fbed16a7..82b451617 100644
--- a/src/oldpool_func.h
+++ b/src/oldpool_func.h
@@ -11,7 +11,8 @@
* Allocate a pool item; possibly allocate a new block in the pool.
* @param first the first pool item to start searching
* @pre first <= Tpool->GetSize()
- * @return the allocated pool item (or NULL when the pool is full).
+ * @pre CanAllocateItem()
+ * @return the allocated pool item
*/
template<typename T, typename Tid, OldMemoryPool<T> *Tpool> T *PoolItem<T, Tid, Tpool>::AllocateSafeRaw(uint &first)
{
@@ -31,7 +32,8 @@ template<typename T, typename Tid, OldMemoryPool<T> *Tpool> T *PoolItem<T, Tid,
/* Check if we can add a block to the pool */
if (Tpool->AddBlockToPool()) return AllocateRaw(first);
- return NULL;
+ /* One should *ALWAYS* be sure to have enough space before making vehicles! */
+ NOT_REACHED();
}
/**