summaryrefslogtreecommitdiff
path: root/lib/talloc/talloc.c
AgeCommit message (Collapse)AuthorFilesLines
2012-10-05talloc: Convert error cecking macros into fnsSimo Sorce1-37/+74
This will avoid 'surprise returns' and makes the code cleare to readers. These macros were complex enough to warrant a full function anyway not just for readability but also for debuggability. Thanks David for pointing out this issue. Autobuild-User(master): Simo Sorce <idra@samba.org> Autobuild-Date(master): Fri Oct 5 23:24:17 CEST 2012 on sn-devel-104
2012-10-05Add memory limiting capability to tallocSimo Sorce1-39/+238
By calling talloc_set_memlimit() we can now set a max memory limit for a whole talloc hierarchy. ANy attempt to allocate memory beyond the max allowed for the whole hierarchy wil cause an allocation failure. Stealing memory correctly accounts for used memory in the old and the new hierarchy but exceeding the memory limit in the new parent will not cause a failure.
2012-07-18talloc: don't allow a talloc_pool inside a talloc_pool.Rusty Russell1-0/+7
We explicitly call free() on a pool which falls to zero, assuming it's not inside another pool (we crash). Check on creation and explicitly document this case. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2012-07-18talloc: use a struct for pool headers.Rusty Russell1-105/+89
This neatens the code a bit (we should do a similar thing for all the TALLOC_CHUNK macros). Two subtler changes: (1) As a result of the struct, we actually pack object_count into the talloc header on 32-bit platforms (since the header is 40 bytes, but needs to be 16-byte aligned). (2) I avoid VALGRIND_MAKE_MEM_UNDEFINED on memmove when we resize the only entry in a pool; that's done later anyway. With -O2 on my 11.04 Ubuntu 32-bit x86 laptop, the talloc_pool speed as measured by testsuite.c actually increases 10%. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2012-04-24talloc: Fix copy&paste errorsVolker Lendecke1-2/+2
2012-01-02talloc: Slightly simplify talloc_unlinkVolker Lendecke1-8/+7
Nested if's are hard to understand to me. Signed-off-by: Stefan Metzmacher <metze@samba.org> Autobuild-User: Volker Lendecke <vlendec@samba.org> Autobuild-Date: Mon Jan 2 19:07:23 CET 2012 on sn-devel-104
2012-01-02talloc: Fix a typoVolker Lendecke1-3/+3
2011-10-26talloc: fix a comment typoMichael Adam1-1/+1
2011-09-07talloc: Remove an unused variableVolker Lendecke1-1/+0
Autobuild-User: Volker Lendecke <vlendec@samba.org> Autobuild-Date: Wed Sep 7 16:47:26 CEST 2011 on sn-devel-104
2011-08-09talloc: ensure the sibling linked list remains valid during a freeAndrew Tridgell1-15/+3
This ensures that the sibling list of a pointer doesn't become invalid during a free operation. It is an alternative fix to the fix in 6f51a1f45bf4de062cce7a562477e8140630a53d, and avoids the problem of trying to calculate the parent pointer early This should fix the subtle spoolss talloc bug that Simo found Autobuild-User: Andrew Tridgell <tridge@samba.org> Autobuild-Date: Tue Aug 9 01:53:17 CEST 2011 on sn-devel-104
2011-07-29talloc: preserve context name on talloc_free_children()Simo Sorce1-0/+23
Otherwise tc->name will end up pointing to garbage when it is not set to a const but rather to a string allocate as child of the context itself. Signed-off-by: Andrew Tridgell <tridge@samba.org>
2011-05-17talloc: splitout _talloc_free_children_internal()Stefan Metzmacher1-50/+27
metze Autobuild-User: Stefan Metzmacher <metze@samba.org> Autobuild-Date: Tue May 17 10:49:13 CEST 2011 on sn-devel-104
2011-05-17talloc: fixed a use after free error in talloc_free_children()Stefan Metzmacher1-1/+16
This is similar to commit 6f51a1f45bf4de062cce7a562477e8140630a53d. metze
2011-05-17talloc: use _talloc_free_internal() in talloc_free_children()Stefan Metzmacher1-1/+1
metze
2011-05-17talloc: setup the new 'tc' before TC_UNDEFINE_GROW_CHUNK() _talloc_realloc()Stefan Metzmacher1-0/+1
metze
2011-05-17talloc: make really sure only optimize realloc if there's only one pool chunkStefan Metzmacher1-1/+6
*talloc_pool_objectcount(pool_tc) == 2 doesn't mean the one of the objects is the pool itself! So we better check for == 1 and calculate the chunk count. metze
2011-05-17talloc: make use of _talloc_free_poolmem() in _talloc_realloc()Stefan Metzmacher1-15/+1
This should follow the same logic... metze
2011-05-17talloc: split the handling of FLAG_POOL/FLAG_POOLMEM in _talloc_free_internalStefan Metzmacher1-32/+66
The optimization of the object_count == 1 case should only happen for when we're not destroying the pool itself. And it should only happen if the pool itself is still valid. If the pool isn't valid (it has TALLOC_FLAG_FREE), object_count == 1 does not mean that the pool is the last object, which can happen if you use talloc_steal/move() on memory from the pool and then free the pool itself. Thanks to Volker for noticing this! metze
2011-05-02talloc: use TC_UNDEFINE_SHRINK_CHUNK() instead of ↵Stefan Metzmacher1-1/+36
TC_INVALIDATE_SHRINK_CHUNK() for realloc path If we optimize on top of raw realloc() we need TC_INVALIDATE_SHRINK_CHUNK together with TC_UNDEFINE_GROW_CHUNK (with was missing and caused false positive valgrind warnings). But that is really slow, as we do a lot of talloc_realloc calls in samba. That's why we only to TC_UNDEFINE_SHRINK_CHUNK() for now. metze
2011-04-13talloc: fix compiler warnings with -Wc++-compatStefan Metzmacher1-5/+5
metze Autobuild-User: Stefan Metzmacher <metze@samba.org> Autobuild-Date: Wed Apr 13 14:33:23 CEST 2011 on sn-devel-104
2011-04-08talloc: include valgrind headers if availableStefan Metzmacher1-0/+9
metze Signed-off-By: Andrew Tridgell <tridge@samba.org>
2011-04-08talloc: add TC_INVALIDATE_POOL marcoStefan Metzmacher1-3/+38
metze Signed-off-By: Andrew Tridgell <tridge@samba.org>
2011-04-08talloc: add TC_UNDEFINE_GROW_CHUNK() marcoStefan Metzmacher1-0/+21
metze Signed-off-By: Andrew Tridgell <tridge@samba.org>
2011-04-08talloc: add TC_INVALIDATE_SHRINK_CHUNK() marcoStefan Metzmacher1-0/+28
This invalidates the unused bytes if we shrink memory. metze Signed-off-By: Andrew Tridgell <tridge@samba.org>
2011-04-08talloc: add TC_INVALIDATE_FULL_CHUNK() macroStefan Metzmacher1-12/+36
This makes it easier to mark a talloc pointer as invalid. metze Signed-off-By: Andrew Tridgell <tridge@samba.org>
2011-04-08talloc: use VALGRIND_MAKE_MEM_UNDEFINED() before memmove()Stefan Metzmacher1-0/+12
metze Signed-off-By: Andrew Tridgell <tridge@samba.org>
2011-04-08talloc: optimize talloc_free() and talloc_realloc() for talloc poolsStefan Metzmacher1-22/+138
metze Signed-off-By: Andrew Tridgell <tridge@samba.org>
2011-04-08talloc: add TC_POOL_FIRST_CHUNK() macroStefan Metzmacher1-2/+5
metze Signed-off-By: Andrew Tridgell <tridge@samba.org>
2011-04-08talloc: add TC_POOL_SPACE_LEFT() macroStefan Metzmacher1-2/+5
metze Signed-off-By: Andrew Tridgell <tridge@samba.org>
2011-04-08talloc: add TC_ALIGN16() macroStefan Metzmacher1-2/+3
metze Signed-off-By: Andrew Tridgell <tridge@samba.org>
2011-04-08talloc: use TC_HDR_SIZE instead of sizeof(struct talloc_chunk)Stefan Metzmacher1-1/+1
As this includes the padding to 16 bytes. metze Signed-off-By: Andrew Tridgell <tridge@samba.org>
2011-01-05talloc: fixed a use after free errorAndrew Tridgell1-1/+16
this is the minimal fix for the problem Rusty found. I previously thought that the best fix would be to change tc->parent to be valid for all pointers, but that is expensive for realloc with large numbers of child pointers, which is much more commmon than I expected it to be. Autobuild-User: Andrew Tridgell <tridge@samba.org> Autobuild-Date: Wed Jan 5 07:22:27 CET 2011 on sn-devel-104
2011-01-05talloc: Clarify error message on access after free.Jelmer Vernooij1-4/+4
2010-11-19talloc: added TALLOC_FREE_FILL environment variableAndrew Tridgell1-0/+30
when this environment variable is set, talloc will fill freed memory with the value from that environment variable. This can be used to help find use after free bugs when valgrind is too slow to be used
2010-10-08Move talloc_enable_null_tracking() to the s3 daemonsVolker Lendecke1-7/+0
2010-09-15talloc: fixed spelling errors in commentAndrew Tridgell1-2/+2
2010-04-20talloc: there is no ambiguity when freeing a ptr with a null parentAndrew Tridgell1-0/+7
when a ptr has a single reference and a NULL parent, then talloc_free(ptr) is not ambiguous, as the caller could not have done a talloc_free(NULL) to free the memory Pair-Programmed-With: Rusty Russell <rusty@samba.org>
2010-04-18talloc: mark public functions as _PUBLIC_Andrew Tridgell1-62/+62
2010-04-02talloc: a useful bit of debug codeAndrew Tridgell1-0/+8
this is useful when tracking down talloc loops. It is probably too expensive to have on by default.
2010-04-02talloc: add a define for TALLOC_MAX_DEPTHAndrew Tridgell1-1/+1
Thanks to the suggestion from simo
2010-04-02talloc: limit the depth that talloc will go for talloc_is_parent()Andrew Tridgell1-2/+11
We have a bug in the dcerpc registry code that can cause a talloc loop that chews unlimited CPU because of talloc_is_parent() during a talloc_free()
2009-12-08talloc: Fix write behind memory blockKamen Mazdrashki1-1/+1
If ALWASY_REALLOC is defined and we are to 'shrink' memory block, memcpy() will write outside memory just allocated. Signed-off-by: Andrew Tridgell <tridge@samba.org>
2009-09-20talloc: fixed talloc_disable_null_tracking()Andrew Tridgell1-0/+27
When we disable null tracking, we need to move any existing objects that are under the null_context to be parented by the true NULL context. We also need a new talloc_enable_null_tracking_no_autofree() function, as the talloc testsuite cannot cope with the moving of the autofree context under the null_context as it wants to check exact counts of objects under the null_context, and smbtorture has a large number of objects in the autofree_context from .init functions
2009-09-17talloc: don't crash if f is NULL in talloc_report_*Andrew Tridgell1-2/+4
It's annoying when you use p talloc_report_full(ctx, fopen("/tmp/xx","w")) in gdb, and if you don't have write permission on the file then you get a segv.
2009-09-15talloc: when we enable NULL tracking, reparent the autofree contextAndrew Tridgell1-0/+3
If NULL tracking is enabled after the autofree context is initialised then autofree ends up separate from the null_context. This means that talloc_report_full() doesn't report the autofree context. Fix this by reparenting the autofree context when we create the null_context.
2009-09-04report the location of the original talloc_free on double freeAndrew Tridgell1-11/+18
When we get a double free abort from talloc it is often hard to work out where the first free came from. This patch takes advantage of the fact that _talloc_free() now takes a location the free was called from to allow the double free abort code to print the location of the first free that conflicts.
2009-08-24talloc: add defines and functions for TALLOC_MAJOR/MINOR_VERSIONStefan Metzmacher1-7/+39
We also use the major and minor versions in the TALLOC_MAGIC, so that we can detect if two conflicting versions of talloc are loaded in one process. In this case we use talloc_log() to output a very useful debug message before we call talloc_abort(). metze
2009-08-24talloc: remove ABI compat functionsStefan Metzmacher1-28/+0
metze
2009-08-24talloc: remove unused build dependecies to sambaStefan Metzmacher1-18/+0
metze
2009-08-24talloc: add talloc_set_log_fn() and talloc_set_log_stderr()Stefan Metzmacher1-12/+49
So that the application can setup a log function to get ERROR and WARNING messages. metze