From 18695cefa16b867427e3ca2fb0d787d850ea25c3 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 6 May 2004 07:30:51 +0000 Subject: [PATCH] r509: fixed a memory handling bug that affects ldb with memory pools that change with each request --- source/lib/ldb/ldb_tdb/ldb_cache.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/lib/ldb/ldb_tdb/ldb_cache.c b/source/lib/ldb/ldb_tdb/ldb_cache.c index 6734de9fd89..87e9538d01b 100644 --- a/source/lib/ldb/ldb_tdb/ldb_cache.c +++ b/source/lib/ldb/ldb_tdb/ldb_cache.c @@ -226,6 +226,7 @@ int ltdb_attribute_flags(struct ldb_context *ldb, const char *attr_name) }; size_t len; int i, ret=0; + struct ldb_alloc_ops alloc = ldb->alloc_ops; if (ltdb->cache.last_attribute.name && ldb_attr_cmp(ltdb->cache.last_attribute.name, attr_name) == 0) { @@ -257,10 +258,14 @@ int ltdb_attribute_flags(struct ldb_context *ldb, const char *attr_name) attrs += strspn(attrs, " ,"); } - if (ltdb->cache.last_attribute.name) ldb_free(ldb, ltdb->cache.last_attribute.name); + ldb->alloc_ops.alloc = NULL; + + ldb_free(ldb, ltdb->cache.last_attribute.name); ltdb->cache.last_attribute.name = ldb_strdup(ldb, attr_name); ltdb->cache.last_attribute.flags = ret; + + ldb->alloc_ops = alloc; return ret; }