]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
r19314: Commit tridge's fixes for a big mem leak in ltdb I introduced
authorSimo Sorce <idra@samba.org>
Mon, 16 Oct 2006 03:15:41 +0000 (03:15 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:21:07 +0000 (14:21 -0500)
when the code has been changed to be async.
With the other committed fixes now this works.
(This used to be commit 49fc640b5c0398516ac3a9e3f7c55205cd60b1de)

source4/lib/ldb/ldb_tdb/ldb_search.c
source4/lib/ldb/ldb_tdb/ldb_tdb.c
source4/lib/ldb/ldb_tdb/ldb_tdb.h

index 7cdb2b672f016580787a3bdfd277dacee96223ef..85b6a123cac6ef97923d3c88e977ccda57f09547 100644 (file)
@@ -499,12 +499,11 @@ int ltdb_search(struct ldb_module *module, struct ldb_request *req)
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
-       req->handle = init_ltdb_handle(ltdb, module, req->context, req->callback);
+       req->handle = init_ltdb_handle(ltdb, module, req);
        if (req->handle == NULL) {
                ltdb_unlock_read(module);
                return LDB_ERR_OPERATIONS_ERROR;
        }
-
        ltdb_ac = talloc_get_type(req->handle->private_data, struct ltdb_context);
 
        ltdb_ac->tree = req->op.search.tree;
index 608120e3a756ce3f484ce4c638a4cd27b319c0a5..bd3045d47762bd24a166d6b4d13fe64ea8ec0868 100644 (file)
@@ -79,13 +79,12 @@ static int ltdb_err_map(enum TDB_ERROR tdb_code)
 
 
 struct ldb_handle *init_ltdb_handle(struct ltdb_private *ltdb, struct ldb_module *module,
-                                         void *context,
-                                         int (*callback)(struct ldb_context *, void *, struct ldb_reply *))
+                                   struct ldb_request *req)
 {
        struct ltdb_context *ac;
        struct ldb_handle *h;
 
-       h = talloc_zero(ltdb, struct ldb_handle);
+       h = talloc_zero(req, struct ldb_handle);
        if (h == NULL) {
                ldb_set_errstring(module->ldb, "Out of Memory");
                return NULL;
@@ -106,8 +105,8 @@ struct ldb_handle *init_ltdb_handle(struct ltdb_private *ltdb, struct ldb_module
        h->status = LDB_SUCCESS;
 
        ac->module = module;
-       ac->context = context;
-       ac->callback = callback;
+       ac->context = req->context;
+       ac->callback = req->callback;
 
        return h;
 }
@@ -307,7 +306,7 @@ static int ltdb_add(struct ldb_module *module, struct ldb_request *req)
                }
        }
        
-       req->handle = init_ltdb_handle(ltdb, module, req->context, req->callback);
+       req->handle = init_ltdb_handle(ltdb, module, req);
        if (req->handle == NULL) {
                return LDB_ERR_OPERATIONS_ERROR;
        }
@@ -416,7 +415,7 @@ static int ltdb_delete(struct ldb_module *module, struct ldb_request *req)
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
-       req->handle = init_ltdb_handle(ltdb, module, req->context, req->callback);
+       req->handle = init_ltdb_handle(ltdb, module, req);
        if (req->handle == NULL) {
                return LDB_ERR_OPERATIONS_ERROR;
        }
@@ -772,7 +771,7 @@ static int ltdb_modify(struct ldb_module *module, struct ldb_request *req)
        
        req->handle = NULL;
 
-       req->handle = init_ltdb_handle(ltdb, module, req->context, req->callback);
+       req->handle = init_ltdb_handle(ltdb, module, req);
        if (req->handle == NULL) {
                return LDB_ERR_OPERATIONS_ERROR;
        }
@@ -826,7 +825,7 @@ static int ltdb_rename(struct ldb_module *module, struct ldb_request *req)
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
-       req->handle = init_ltdb_handle(ltdb, module, req->context, req->callback);
+       req->handle = init_ltdb_handle(ltdb, module, req);
        if (req->handle == NULL) {
                return LDB_ERR_OPERATIONS_ERROR;
        }
index 670d3b680198150b8f513c4f9ecab62f83120ef6..95a1d23905270609c9b7c8b9857b7ed56a453f57 100644 (file)
@@ -110,8 +110,7 @@ int ltdb_search(struct ldb_module *module, struct ldb_request *req);
 
 /* The following definitions come from lib/ldb/ldb_tdb/ldb_tdb.c  */
 struct ldb_handle *init_ltdb_handle(struct ltdb_private *ltdb, struct ldb_module *module,
-                                         void *context,
-                                         int (*callback)(struct ldb_context *, void *, struct ldb_reply *));
+                                   struct ldb_request *req);
 struct TDB_DATA ltdb_key(struct ldb_module *module, const struct ldb_dn *dn);
 int ltdb_store(struct ldb_module *module, const struct ldb_message *msg, int flgs);
 int ltdb_delete_noindex(struct ldb_module *module, const struct ldb_dn *dn);