Lines Matching refs:cache

57 void cache_destroy(cache_t *cache) {  in cache_destroy()  argument
58 while (cache->freecurr > 0) { in cache_destroy()
59 void *ptr = cache->ptr[--cache->freecurr]; in cache_destroy()
60 if (cache->destructor) { in cache_destroy()
61 cache->destructor(get_object(ptr), NULL); in cache_destroy()
65 free(cache->name); in cache_destroy()
66 free(cache->ptr); in cache_destroy()
67 pthread_mutex_destroy(&cache->mutex); in cache_destroy()
68 free(cache); in cache_destroy()
71 void* cache_alloc(cache_t *cache) { in cache_alloc() argument
74 pthread_mutex_lock(&cache->mutex); in cache_alloc()
75 if (cache->freecurr > 0) { in cache_alloc()
76 ret = cache->ptr[--cache->freecurr]; in cache_alloc()
79 object = ret = malloc(cache->bufsize); in cache_alloc()
83 if (cache->constructor != NULL && in cache_alloc()
84 cache->constructor(object, NULL, 0) != 0) { in cache_alloc()
90 pthread_mutex_unlock(&cache->mutex); in cache_alloc()
98 memcpy(((char*)ret) + cache->bufsize - (2 * sizeof(redzone_pattern)), in cache_alloc()
106 void cache_free(cache_t *cache, void *ptr) { in cache_free() argument
107 pthread_mutex_lock(&cache->mutex); in cache_free()
111 if (memcmp(((char*)ptr) + cache->bufsize - (2 * sizeof(redzone_pattern)), in cache_free()
115 pthread_mutex_unlock(&cache->mutex); in cache_free()
123 pthread_mutex_unlock(&cache->mutex); in cache_free()
128 if (cache->freecurr < cache->freetotal) { in cache_free()
129 cache->ptr[cache->freecurr++] = ptr; in cache_free()
132 size_t newtotal = cache->freetotal * 2; in cache_free()
133 void **new_free = realloc(cache->ptr, sizeof(char *) * newtotal); in cache_free()
135 cache->freetotal = newtotal; in cache_free()
136 cache->ptr = new_free; in cache_free()
137 cache->ptr[cache->freecurr++] = ptr; in cache_free()
139 if (cache->destructor) { in cache_free()
140 cache->destructor(ptr, NULL); in cache_free()
146 pthread_mutex_unlock(&cache->mutex); in cache_free()