diff options
author | Stefan Metzmacher <metze@samba.org> | 2008-09-29 08:42:03 +0200 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2008-09-29 08:42:03 +0200 |
commit | 59c3df814a4357d4358e6bcd3bd5d3ff6a18d995 (patch) | |
tree | f8cd88506a7b828ce3421729e14d095742335ad4 | |
parent | 95940d75ec51d2f519a1b657e587a77304eaed08 (diff) | |
download | samba-59c3df814a4357d4358e6bcd3bd5d3ff6a18d995.tar.gz samba-59c3df814a4357d4358e6bcd3bd5d3ff6a18d995.tar.bz2 samba-59c3df814a4357d4358e6bcd3bd5d3ff6a18d995.zip |
s4:samldb: use the code path with async ldb
This removes the event_context leak that caused
NT_STATUS_TOO_MANY_OPENED_FILES in the server,
because of all the epool fds
metze
-rw-r--r-- | source4/dsdb/samdb/ldb_modules/samldb.c | 47 |
1 files changed, 4 insertions, 43 deletions
diff --git a/source4/dsdb/samdb/ldb_modules/samldb.c b/source4/dsdb/samdb/ldb_modules/samldb.c index e4fc4908a4..a71ffff618 100644 --- a/source4/dsdb/samdb/ldb_modules/samldb.c +++ b/source4/dsdb/samdb/ldb_modules/samldb.c @@ -154,12 +154,8 @@ static int samldb_search_template_callback(struct ldb_request *req, goto done; } if (ares->error != LDB_SUCCESS) { -#ifdef REAL_EVENT_SYSTEM_HOOKED_UP return ldb_module_done(ac->req, ares->controls, ares->response, ares->error); -#else - return ldb_request_done(req, ares->error); -#endif } switch (ares->type) { @@ -187,21 +183,13 @@ static int samldb_search_template_callback(struct ldb_request *req, case LDB_REPLY_DONE: talloc_free(ares); -#ifdef REAL_EVENT_SYSTEM_HOOKED_UP ret = samldb_next_step(ac); -#else - return ldb_request_done(req, LDB_SUCCESS); -#endif break; } done: if (ret != LDB_SUCCESS) { -#ifdef REAL_EVENT_SYSTEM_HOOKED_UP return ldb_module_done(ac->req, NULL, NULL, ret); -#else - return ldb_request_done(req, ret); -#endif } return LDB_SUCCESS; @@ -240,20 +228,7 @@ static int samldb_search_template(struct samldb_ctx *ac) return LDB_ERR_OPERATIONS_ERROR; } - /* NOTE: this is a request on a different database! - * - * Therefore we need to do a bloody sync call - * otherwise the fake event queue will never call it - * as it runs on the main ldb context and knows - * nothing about the templates_ldb one */ -#ifdef REAL_EVENT_SYSTEM_HOOKED_UP ev = ldb_get_event_context(ac->module->ldb); -#else - ev = event_context_init(NULL); -#endif - if (!talloc_reference(templates_ldb, ev)) { - return LDB_ERR_OPERATIONS_ERROR; - } templates_ldb = ldb_wrap_connect(ac->module->ldb, ev, lparm_ctx, templates_ldb_path, @@ -264,6 +239,10 @@ static int samldb_search_template(struct samldb_ctx *ac) return LDB_ERR_OPERATIONS_ERROR; } + if (!talloc_reference(templates_ldb, ev)) { + return LDB_ERR_OPERATIONS_ERROR; + } + ret = ldb_set_opaque(ac->module->ldb, "templates_ldb", templates_ldb); if (ret != LDB_SUCCESS) { @@ -295,25 +274,7 @@ static int samldb_search_template(struct samldb_ctx *ac) talloc_steal(req, basedn); ac->ares = NULL; - /* NOTE: this is a request on a different database! - * Therefore we need to do a bloody sync call - * otherwise the fake event queue will never call it - * as it runs on the main ldb context and knows - * nothing about the templates_ldb one */ -#ifdef REAL_EVENT_SYSTEM_HOOKED_UP return ldb_request(templates_ldb, req); -#else - ret = ldb_request(templates_ldb, req); - if (ret != LDB_SUCCESS) { - return ret; - } - ret = ldb_wait(req->handle, LDB_WAIT_ALL); - if (ret != LDB_SUCCESS) { - return ret; - } - - return samldb_next_step(ac); -#endif } static int samldb_apply_template(struct samldb_ctx *ac) |