From 655b710204e7a7d8e486da7ba675fcbeed116fea Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 16 Sep 2006 16:59:37 +0000 Subject: r18584: found one of the fd leaks. The registry backend was using a talloc(NULL, xxx) to allocate the registry context. That had two consequences 1) it was a massive memory leak, as all winreg operations leaked their entire context (including an open ldb database) every time 2) event_context_find() never found the exsting event context, so we used a new event context each time, which called epoll_create() each time, which caused a fd to be allocated (This used to be commit 1c0a3de39828b43149d8981fc7f10e7c8b59a392) --- source4/lib/registry/tools/regdiff.c | 4 ++-- source4/lib/registry/tools/regpatch.c | 2 +- source4/lib/registry/tools/regshell.c | 2 +- source4/lib/registry/tools/regtree.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) (limited to 'source4/lib/registry/tools') diff --git a/source4/lib/registry/tools/regdiff.c b/source4/lib/registry/tools/regdiff.c index dbbe555ad6..b8bf654a6b 100644 --- a/source4/lib/registry/tools/regdiff.c +++ b/source4/lib/registry/tools/regdiff.c @@ -54,8 +54,8 @@ int main(int argc, char **argv) error = WERR_OK; switch(opt) { case 'L': - if (!h1 && !from_null) error = reg_open_local(&h1, NULL, cmdline_credentials); - else if (!h2) error = reg_open_local(&h2, NULL, cmdline_credentials); + if (!h1 && !from_null) error = reg_open_local(NULL, &h1, NULL, cmdline_credentials); + else if (!h2) error = reg_open_local(NULL, &h2, NULL, cmdline_credentials); break; case 'R': if (!h1 && !from_null) diff --git a/source4/lib/registry/tools/regpatch.c b/source4/lib/registry/tools/regpatch.c index 7ed246566c..42cdac860b 100644 --- a/source4/lib/registry/tools/regpatch.c +++ b/source4/lib/registry/tools/regpatch.c @@ -52,7 +52,7 @@ int main(int argc, char **argv) if (remote) { error = reg_open_remote (&h, NULL, cmdline_credentials, remote, NULL); } else { - error = reg_open_local (&h, NULL, cmdline_credentials); + error = reg_open_local (NULL, &h, NULL, cmdline_credentials); } if (W_ERROR_IS_OK(error)) { diff --git a/source4/lib/registry/tools/regshell.c b/source4/lib/registry/tools/regshell.c index 0bc1cfe324..8436a3f505 100644 --- a/source4/lib/registry/tools/regshell.c +++ b/source4/lib/registry/tools/regshell.c @@ -434,7 +434,7 @@ static char **reg_completion(const char *text, int start, int end) } else if (backend) { error = reg_open_hive(NULL, backend, poptGetArg(pc), NULL, cmdline_credentials, &curkey); } else { - error = reg_open_local(&h, NULL, cmdline_credentials); + error = reg_open_local(NULL, &h, NULL, cmdline_credentials); } if(!W_ERROR_IS_OK(error)) { diff --git a/source4/lib/registry/tools/regtree.c b/source4/lib/registry/tools/regtree.c index 31f5a89a1b..6b3c20eae3 100644 --- a/source4/lib/registry/tools/regtree.c +++ b/source4/lib/registry/tools/regtree.c @@ -122,7 +122,7 @@ int main(int argc, char **argv) return 1; } } else { - error = reg_open_local (&h, NULL, cmdline_credentials); + error = reg_open_local (NULL, &h, NULL, cmdline_credentials); if(!W_ERROR_IS_OK(error)) { fprintf(stderr, "Unable to open local registry:%s \n", win_errstr(error)); -- cgit