[SCM] Samba Shared Repository - branch master updated
Stefan Metzmacher
metze at samba.org
Mon Mar 15 08:08:44 MDT 2010
The branch, master has been updated
via 386f15c... s3:smbd: make sure we always have a valid talloc stackframe
via d23581b... talloc_stack: reset stackframe pointers to NULL
via 10ed809... talloc_stack: make sure we never let talloc_tos() return ts->talloc_stack[-1]
from 1eb0fbe... s4-smbtorture: cleanup data after enumdata{ex} consistency test.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 386f15c62bb4d3517de719c750252e06cf3b1fb1
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Mar 15 14:42:17 2010 +0100
s3:smbd: make sure we always have a valid talloc stackframe
metze
commit d23581b4d7a4936002c1d2d748836aead9215120
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Mar 15 14:39:11 2010 +0100
talloc_stack: reset stackframe pointers to NULL
This makes it easier to debug the code in future.
metze
commit 10ed809a1a31be50ce09142eb99b3a243ae8b940
Author: Stefan Metzmacher <metze at samba.org>
Date: Mon Mar 15 14:32:52 2010 +0100
talloc_stack: make sure we never let talloc_tos() return ts->talloc_stack[-1]
In smbd there's a small gab between TALLOC_FREE(frame); before
be call smbd_parent_loop() where we don't have a valid talloc stackframe.
smbd_parent_loop() calls talloc_stackframe() only within the while(1) loop.
As DEBUG(2,("waiting for connections")) uses talloc_tos() to construct
the time header for the debug message we crash on some systems.
metze
-----------------------------------------------------------------------
Summary of changes:
lib/util/talloc_stack.c | 4 +++-
source3/smbd/server.c | 3 +++
2 files changed, 6 insertions(+), 1 deletions(-)
Changeset truncated at 500 lines:
diff --git a/lib/util/talloc_stack.c b/lib/util/talloc_stack.c
index 596efbf..f34d495 100644
--- a/lib/util/talloc_stack.c
+++ b/lib/util/talloc_stack.c
@@ -103,8 +103,10 @@ static int talloc_pop(TALLOC_CTX *frame)
break;
}
talloc_free(ts->talloc_stack[i]);
+ ts->talloc_stack[i] = NULL;
}
+ ts->talloc_stack[i] = NULL;
ts->talloc_stacksize = i;
return 0;
}
@@ -181,7 +183,7 @@ TALLOC_CTX *talloc_tos(void)
struct talloc_stackframe *ts =
(struct talloc_stackframe *)SMB_THREAD_GET_TLS(global_ts);
- if (ts == NULL) {
+ if (ts == NULL || ts->talloc_stacksize == 0) {
talloc_stackframe();
ts = (struct talloc_stackframe *)SMB_THREAD_GET_TLS(global_ts);
DEBUG(0, ("no talloc stackframe around, leaking memory\n"));
diff --git a/source3/smbd/server.c b/source3/smbd/server.c
index 5347bb9..d3fc499 100644
--- a/source3/smbd/server.c
+++ b/source3/smbd/server.c
@@ -1338,9 +1338,12 @@ extern void build_options(bool screen);
exit_server("open_sockets_smbd() failed");
TALLOC_FREE(frame);
+ /* make sure we always have a valid stackframe */
+ frame = talloc_stackframe();
smbd_parent_loop(parent);
exit_server_cleanly(NULL);
+ TALLOC_FREE(frame);
return(0);
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list