summaryrefslogtreecommitdiff
path: root/source3/lib/memcache.c
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2007-12-20 10:55:45 +0100
committerVolker Lendecke <vl@samba.org>2007-12-21 09:58:20 +0100
commitcc48010f41684b5ef8c2e8a5511528cc426d300f (patch)
treee738282c88adf23170468906b1a3c8fa1bbe4d21 /source3/lib/memcache.c
parentdf133758c2496a5c99441635eca6b77c9019cb8c (diff)
downloadsamba-cc48010f41684b5ef8c2e8a5511528cc426d300f.tar.gz
samba-cc48010f41684b5ef8c2e8a5511528cc426d300f.tar.bz2
samba-cc48010f41684b5ef8c2e8a5511528cc426d300f.zip
Add a global cache
It hurts, but I think this global variable is necessary for transition, and it has the potential to remove quite a few other global variables without messing with APIs too much. (This used to be commit c131d0dc52ec09c9227eff3d68877369c37aaed5)
Diffstat (limited to 'source3/lib/memcache.c')
-rw-r--r--source3/lib/memcache.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/source3/lib/memcache.c b/source3/lib/memcache.c
index 17630066ae..38bbd66085 100644
--- a/source3/lib/memcache.c
+++ b/source3/lib/memcache.c
@@ -20,6 +20,8 @@
#include "memcache.h"
#include "rbtree.h"
+static struct memcache *global_cache;
+
struct memcache_element {
struct rb_node rb_node;
struct memcache_element *prev, *next;
@@ -58,6 +60,12 @@ struct memcache *memcache_init(TALLOC_CTX *mem_ctx, size_t max_size)
return result;
}
+void memcache_set_global(struct memcache *cache)
+{
+ TALLOC_FREE(global_cache);
+ global_cache = cache;
+}
+
static struct memcache_element *memcache_node2elem(struct rb_node *node)
{
return (struct memcache_element *)
@@ -119,6 +127,13 @@ bool memcache_lookup(struct memcache *cache, enum memcache_number n,
{
struct memcache_element *e;
+ if (cache == NULL) {
+ cache = global_cache;
+ }
+ if (cache == NULL) {
+ return false;
+ }
+
e = memcache_find(cache, n, key);
if (e == NULL) {
return false;
@@ -172,6 +187,13 @@ void memcache_delete(struct memcache *cache, enum memcache_number n,
{
struct memcache_element *e;
+ if (cache == NULL) {
+ cache = global_cache;
+ }
+ if (cache == NULL) {
+ return;
+ }
+
e = memcache_find(cache, n, key);
if (e == NULL) {
return;
@@ -189,6 +211,13 @@ void memcache_add(struct memcache *cache, enum memcache_number n,
DATA_BLOB cache_key, cache_value;
size_t element_size;
+ if (cache == NULL) {
+ cache = global_cache;
+ }
+ if (cache == NULL) {
+ return;
+ }
+
if (key.length == 0) {
return;
}
@@ -258,6 +287,13 @@ void memcache_flush(struct memcache *cache, enum memcache_number n)
{
struct rb_node *node;
+ if (cache == NULL) {
+ cache = global_cache;
+ }
+ if (cache == NULL) {
+ return;
+ }
+
/*
* Find the smallest element of number n
*/