diff options
author | rubidium <rubidium@openttd.org> | 2009-01-09 15:01:15 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2009-01-09 15:01:15 +0000 |
commit | 0464e9f864da7b71fdf7b568916596fbb8a614bb (patch) | |
tree | 86ecd22a30e9df98841e74d530337206a9a322c9 /src | |
parent | 07c5fb2a028dbb97e3c28d267c49131aaba4facb (diff) | |
download | openttd-0464e9f864da7b71fdf7b568916596fbb8a614bb.tar.xz |
(svn r14935) -Fix [FS#2498]: the new operator may not return NULL, so don't.
Diffstat (limited to 'src')
-rw-r--r-- | src/oldpool.h | 10 | ||||
-rw-r--r-- | src/oldpool_func.h | 6 |
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(); } /** |