svn commit: samba r18996 - in branches/SAMBA_3_0/source/lib/talloc:
.
metze at samba.org
metze at samba.org
Fri Sep 29 10:53:28 GMT 2006
Author: metze
Date: 2006-09-29 10:53:27 +0000 (Fri, 29 Sep 2006)
New Revision: 18996
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=18996
Log:
merge from samba4:
- fix bug 4078
- talloc_free(talloc_autofree_context()); should not result
in a SIGABORT on exit
- add a test for this, but this test can also pass in the standalone build
and samba3, as samba4 uses talloc_autofree_context()
metze
Modified:
branches/SAMBA_3_0/source/lib/talloc/talloc.c
branches/SAMBA_3_0/source/lib/talloc/testsuite.c
Changeset:
Modified: branches/SAMBA_3_0/source/lib/talloc/talloc.c
===================================================================
--- branches/SAMBA_3_0/source/lib/talloc/talloc.c 2006-09-29 10:50:12 UTC (rev 18995)
+++ branches/SAMBA_3_0/source/lib/talloc/talloc.c 2006-09-29 10:53:27 UTC (rev 18996)
@@ -82,7 +82,7 @@
NULL
*/
static void *null_context;
-static void *cleanup_context;
+static void *autofree_context;
struct talloc_reference_handle {
struct talloc_reference_handle *next, *prev;
@@ -1208,10 +1208,15 @@
}
+static int talloc_autofree_destructor(void *ptr)
+{
+ autofree_context = NULL;
+ return 0;
+}
+
static void talloc_autofree(void)
{
- talloc_free(cleanup_context);
- cleanup_context = NULL;
+ talloc_free(autofree_context);
}
/*
@@ -1220,11 +1225,12 @@
*/
void *talloc_autofree_context(void)
{
- if (cleanup_context == NULL) {
- cleanup_context = talloc_named_const(NULL, 0, "autofree_context");
+ if (autofree_context == NULL) {
+ autofree_context = talloc_named_const(NULL, 0, "autofree_context");
+ talloc_set_destructor(autofree_context, talloc_autofree_destructor);
atexit(talloc_autofree);
}
- return cleanup_context;
+ return autofree_context;
}
size_t talloc_get_size(const void *context)
Modified: branches/SAMBA_3_0/source/lib/talloc/testsuite.c
===================================================================
--- branches/SAMBA_3_0/source/lib/talloc/testsuite.c 2006-09-29 10:50:12 UTC (rev 18995)
+++ branches/SAMBA_3_0/source/lib/talloc/testsuite.c 2006-09-29 10:53:27 UTC (rev 18996)
@@ -24,10 +24,6 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#ifdef _SAMBA_BUILD_
-#include "version.h"
-#endif /* _SAMBA_BUILD_ */
-
#include "replace.h"
#include "system/time.h"
#include "talloc.h"
@@ -48,7 +44,7 @@
(tv2.tv_usec - tv->tv_usec)*1.0e-6;
}
-#if SAMBA_VERSION_MAJOR==3
+#if _SAMBA_BUILD_==3
#ifdef malloc
#undef malloc
#endif
@@ -1040,6 +1036,28 @@
return ret;
}
+static bool test_autofree(void)
+{
+#if _SAMBA_BUILD_>=4
+ /*
+ * we can't run this inside smbtorture in samba4
+ * as smbtorture uses talloc_autofree_context()
+ */
+ printf("SKIPPING TALLOC AUTOFREE CONTEXT (not supported from smbtorture)\n");
+#else
+ void *p;
+
+ printf("TESTING TALLOC AUTOFREE CONTEXT\n");
+
+ p = talloc_autofree_context();
+ talloc_free(p);
+
+ p = talloc_autofree_context();
+ talloc_free(p);
+#endif
+ return true;
+}
+
bool torture_local_talloc(struct torture_context *torture)
{
bool ret = true;
@@ -1067,13 +1085,14 @@
if (ret) {
ret &= test_speed();
}
+ ret &= test_autofree();
return ret;
}
-#if !defined(_SAMBA_BUILD_) || ((SAMBA_VERSION_MAJOR==3)&&(SAMBA_VERSION_MINOR<9))
+#if _SAMBA_BUILD_<4
int main(void)
{
if (!torture_local_talloc(NULL)) {
More information about the samba-cvs
mailing list