summaryrefslogtreecommitdiff
path: root/source4/lib/ldb/common/ldb.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2010-09-24 12:07:16 -0700
committerAndrew Tridgell <tridge@samba.org>2010-09-25 10:38:45 -0700
commitf4893e7d33b7c9aaafba5ce8657972d3eb600257 (patch)
tree272feafb24baf123578161ac58524393138e4270 /source4/lib/ldb/common/ldb.c
parentd72dbe847e0db605e950e6656d758cb60bf628a7 (diff)
downloadsamba-f4893e7d33b7c9aaafba5ce8657972d3eb600257.tar.gz
samba-f4893e7d33b7c9aaafba5ce8657972d3eb600257.tar.bz2
samba-f4893e7d33b7c9aaafba5ce8657972d3eb600257.zip
ldb: added request location tracking
this is used to help debug async ldb requests. The ldb request handle now contains a location string and the parent request pointer. This allows us to print a backtrace of ldb requests in the dsdb modules.
Diffstat (limited to 'source4/lib/ldb/common/ldb.c')
-rw-r--r--source4/lib/ldb/common/ldb.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/source4/lib/ldb/common/ldb.c b/source4/lib/ldb/common/ldb.c
index 03622ce5a1..34d64ebb7a 100644
--- a/source4/lib/ldb/common/ldb.c
+++ b/source4/lib/ldb/common/ldb.c
@@ -34,6 +34,7 @@
#define TEVENT_DEPRECATED 1
#include "ldb_private.h"
+#include "ldb.h"
static int ldb_context_destructor(void *ptr)
{
@@ -1071,6 +1072,7 @@ int ldb_build_search_req_ex(struct ldb_request **ret_req,
if (parent) {
req->handle->nesting++;
+ req->handle->parent = parent;
}
*ret_req = req;
@@ -1435,6 +1437,7 @@ int ldb_search(struct ldb_context *ldb, TALLOC_CTX *mem_ctx,
res,
ldb_search_default_callback,
NULL);
+ ldb_req_set_location(req, "ldb_search");
if (ret != LDB_SUCCESS) goto done;
@@ -1478,6 +1481,7 @@ int ldb_add(struct ldb_context *ldb,
NULL,
ldb_op_default_callback,
NULL);
+ ldb_req_set_location(req, "ldb_add");
if (ret != LDB_SUCCESS) return ret;
@@ -1508,6 +1512,7 @@ int ldb_modify(struct ldb_context *ldb,
NULL,
ldb_op_default_callback,
NULL);
+ ldb_req_set_location(req, "ldb_modify");
if (ret != LDB_SUCCESS) return ret;
@@ -1533,6 +1538,7 @@ int ldb_delete(struct ldb_context *ldb, struct ldb_dn *dn)
NULL,
ldb_op_default_callback,
NULL);
+ ldb_req_set_location(req, "ldb_delete");
if (ret != LDB_SUCCESS) return ret;
@@ -1559,6 +1565,7 @@ int ldb_rename(struct ldb_context *ldb,
NULL,
ldb_op_default_callback,
NULL);
+ ldb_req_set_location(req, "ldb_rename");
if (ret != LDB_SUCCESS) return ret;
@@ -1783,3 +1790,22 @@ void ldb_set_flags(struct ldb_context *ldb, unsigned flags)
{
ldb->flags = flags;
}
+
+
+/*
+ set the location in a ldb request. Used for debugging
+ */
+void ldb_req_set_location(struct ldb_request *req, const char *location)
+{
+ if (req && req->handle) {
+ req->handle->location = location;
+ }
+}
+
+/*
+ return the location set with dsdb_req_set_location
+ */
+const char *ldb_req_location(struct ldb_request *req)
+{
+ return req->handle->location;
+}