1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #include "cache.h"
- /*--------------------------------------------------------- */
- size_t
- lub_heap_cache_bucket__get_block_overhead(lub_heap_cache_bucket_t * this,
- const char *ptr)
- {
- return sizeof(lub_heap_cache_bucket_t *);
- }
- /*--------------------------------------------------------- */
- size_t
- lub_heap_cache_bucket__get_block_size(lub_heap_cache_bucket_t * this,
- const char *ptr)
- {
- size_t size = 0;
- /* get the size from the cache */
- lub_blockpool_stats_t stats;
- lub_blockpool__get_stats(&this->m_blockpool, &stats);
- size = stats.block_size - sizeof(lub_heap_cache_bucket_t *);
- return size;
- }
- /*--------------------------------------------------------- */
- void
- lub_heap_cache_bucket_init(lub_heap_cache_bucket_t * this,
- lub_heap_cache_t * cache,
- size_t block_size, size_t bucket_size)
- {
- /* initialise the blockpool */
- size_t num_blocks = bucket_size / block_size;
- lub_blockpool_init(&this->m_blockpool,
- this->m_memory_start, block_size, num_blocks);
- this->m_memory_end = this->m_memory_start + bucket_size;
- this->m_cache = cache;
- }
- /*--------------------------------------------------------- */
- void *lub_heap_cache_bucket_alloc(lub_heap_cache_bucket_t * this)
- {
- void *ptr = 0;
- lub_heap_cache_bucket_t **bucket_ptr =
- lub_blockpool_alloc(&this->m_blockpool);
- if (bucket_ptr) {
- *bucket_ptr = this;
- ptr = ++bucket_ptr;
- /* make sure that released memory is tainted */
- lub_heap_taint_memory(ptr,
- LUB_HEAP_TAINT_ALLOC,
- this->m_blockpool.m_block_size -
- sizeof(lub_heap_cache_bucket_t *));
- }
- return ptr;
- }
- /*--------------------------------------------------------- */
- lub_heap_status_t
- lub_heap_cache_bucket_free(lub_heap_cache_bucket_t * this, void *ptr)
- {
- lub_heap_status_t status = LUB_HEAP_CORRUPTED;
- lub_heap_cache_bucket_t **bucket_ptr = ptr;
- --bucket_ptr;
- if (*bucket_ptr == this) {
- lub_blockpool_free(&this->m_blockpool, bucket_ptr);
- /* make sure that released memory is tainted */
- lub_heap_taint_memory((char *)bucket_ptr,
- LUB_HEAP_TAINT_FREE,
- this->m_blockpool.m_block_size);
- status = LUB_HEAP_OK;
- }
- return status;
- }
- /*--------------------------------------------------------- */
|