summaryrefslogtreecommitdiff
path: root/cache.h
diff options
context:
space:
mode:
authorTrond Norbye <Trond.Norbye@sun.com>2009-03-27 18:30:16 +0100
committerDustin Sallings <dustin@spy.net>2009-04-17 16:15:52 -0700
commit4c86fa592fcc7cb685c6e9d8b6aebe8dcbac6b3e (patch)
tree94b644163f6381a9930e2d7c583fae023895b903 /cache.h
parentee0c3d5ae74d0862b4d9990e2ad13bc79f8c34df (diff)
downloadmemcached-4c86fa592fcc7cb685c6e9d8b6aebe8dcbac6b3e.tar.gz
Create a generic cache for objects of same size
The suffix pool could be thread-local and use the generic cache
Diffstat (limited to 'cache.h')
-rw-r--r--cache.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/cache.h b/cache.h
new file mode 100644
index 0000000..f720ee0
--- /dev/null
+++ b/cache.h
@@ -0,0 +1,44 @@
+/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
+#ifndef CACHE_H
+#define CACHE_H
+#include <pthread.h>
+
+#ifdef HAVE_UMEM_H
+#include <umem.h>
+#define cache_t umem_cache_t
+#define cache_alloc(a) umem_cache_alloc(a, UMEM_DEFAULT)
+#define cache_free(a, b) umem_cache_free(a, b)
+#define cache_create(a,b,c,d,e) umem_cache_create((char*)a, b, c, d, e, NULL, NULL, NULL, 0)
+#define cache_destroy(a) umem_cache_destroy(a);
+
+#else
+
+#ifndef NDEBUG
+/* may be used for debug purposes */
+extern int cache_error;
+#endif
+
+typedef int cache_constructor_t(void *, void *, int);
+typedef void cache_destructor_t(void *, void *);
+
+typedef struct {
+ pthread_mutex_t mutex;
+ char *name;
+ void **ptr;
+ size_t bufsize;
+ int freetotal;
+ int freecurr;
+ cache_constructor_t* constructor;
+ cache_destructor_t* destructor;
+} cache_t;
+
+
+cache_t* cache_create(const char *name, size_t bufsize, size_t align,
+ cache_constructor_t* constructor,
+ cache_destructor_t* destructor);
+void cache_destroy(cache_t*);
+void* cache_alloc(cache_t*);
+void cache_free(cache_t*, void*);
+#endif
+
+#endif