summaryrefslogtreecommitdiffstats
path: root/lib/talloc/talloc.c
Commit message (Collapse)AuthorAgeFilesLines
* talloc: fix compiler warningStefan Metzmacher2014-05-161-1/+4
| | | | | | | | | | | | | This avoids the following warning when using: CFLAGS="-O3 -g -fstrict-overflow -Wstrict-overflow=5" ../talloc.c: In Funktion »talloc_is_parent«: ../talloc.c:2658:21: Warnung: assuming signed overflow does not occur when changing X +- C1 cmp C2 to X cmp C1 +- C2 [-Wstrict-overflow] Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* talloc: inline talloc_get_name()Stefan Metzmacher2014-05-161-6/+10
| | | | | Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* talloc: inline more static functionsStefan Metzmacher2014-05-161-19/+26
| | | | | | | We need the code to be as fast as possible. Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* talloc: Tune talloc_vasprintfVolker Lendecke2014-05-151-5/+9
| | | | | | | | | | | | vsnprintf is significantly more expensive than memcpy. For the common case where the string we print is less than a kilobyte, avoid the second vsnprintf. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> Autobuild-User(master): Jeremy Allison <jra@samba.org> Autobuild-Date(master): Thu May 15 12:49:14 CEST 2014 on sn-devel-104
* talloc: Add talloc_pooled_objectVolker Lendecke2013-09-081-0/+66
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* talloc: Allow nested pools.Volker Lendecke2013-09-081-22/+25
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Signed-off-by: Jeremy Allison <jra@samba.org>
* talloc: Add a separate pool sizeVolker Lendecke2013-09-081-12/+23
| | | | | | | | | | | | | This is necessary to allow talloc pools to be objects on their own. It is an incompatible change in the sense that talloc_get_size(pool) now returns 0 instead of the pool size. When the talloc_pooled_object() call is added, this will start to make sense again. Maybe we should add a talloc_pool_size call? Or is that overkill? Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org>
* talloc: Put pool-specific data before the chunkVolker Lendecke2013-09-081-79/+125
| | | | | | | This is a preparation to make talloc pool real objects themselves. Signed-off-by: Volker Lendecke <vl@samba.org> Signed-off-by: Jeremy Allison <jra@samba.org>
* talloc: Introduce __talloc_with_prefixVolker Lendecke2013-09-081-10/+22
| | | | | | | | This will allow to exchange the extra talloc pool header with the talloc_chunk structure Signed-off-by: Volker Lendecke <vl@samba.org> Signed-off-by: Jeremy Allison <jra@samba.org>
* talloc: Decouple the dual use of chunk->poolVolker Lendecke2013-09-081-25/+23
| | | | | | | | | | | If we want nested pools, we will have pools that are pool members. So we will have to have a separate "next object" pointer for pools. As we have struct talloc_pool_chunk now, this additional pointer does not affect normal talloc objects. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org>
* Fix valgrind errors with memmove and talloc pools.Jeremy Allison2013-08-281-0/+21
| | | | | | | | | | bin/smbtorture //127.0.0.1 local.talloc now runs with no valgrind errors. Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: "Stefan (metze) Metzmacher" <metze@samba.org> Autobuild-User(master): Jeremy Allison <jra@samba.org> Autobuild-Date(master): Wed Aug 28 02:44:17 CEST 2013 on sn-devel-104
* Remove talloc_memlimit_update(). No longer used.Jeremy Allison2013-08-271-24/+0
| | | | | Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Simo Sorce <idra@samba.org>
* Inside _talloc_realloc(), keep track of size changes over malloc/realloc/free.Jeremy Allison2013-08-271-4/+15
| | | | | | | | Replace the last use of talloc_memlimit_update() with talloc_memlimit_grow()/ talloc_memlimit_shrink(). Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Simo Sorce <idra@samba.org>
* Don't call talloc_memlimit_update() inside _talloc_realloc() when we're just ↵Jeremy Allison2013-08-271-15/+0
| | | | | | | manipulating pool members. Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Simo Sorce <idra@samba.org>
* Fix a conditional check. (size - tc->size > 0) is always true if size and ↵Jeremy Allison2013-08-271-1/+1
| | | | | | | | | tc->size are unsigned. Replace with (size > tc->size). Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Simo Sorce <idra@samba.org>
* In _talloc_steal_internal(), correctly decrement the memory limit in the ↵Jeremy Allison2013-08-271-12/+5
| | | | | | | source, and increment in the destination. Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Simo Sorce <idra@samba.org>
* Inside _talloc_free_internal(), always call talloc_memlimit_update_on_free() ↵Jeremy Allison2013-08-271-23/+4
| | | | | | | before we free the real memory. Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Simo Sorce <idra@samba.org>
* Update memory limits when we call free() on a pool.Jeremy Allison2013-08-271-0/+2
| | | | | Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Simo Sorce <idra@samba.org>
* Change __talloc() to only call ↵Jeremy Allison2013-08-271-12/+9
| | | | | | | | | | talloc_memlimit_check()/talloc_memlimit_grow() on actual malloc allocation. Don't check the memlimit if the allocation was successful from a pool. We already checked the memory limit when we created the pool. Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Simo Sorce <idra@samba.org>
* Change _talloc_total_mem_internal() to ignore memory allocated from a pool ↵Jeremy Allison2013-08-271-1/+8
| | | | | | | | | when calculating limit size. We must only count normal tallocs, or a talloc pool itself. Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Simo Sorce <idra@samba.org>
* Remove magic TC_HDR_SIZE handling inside talloc_memlimit_check().Jeremy Allison2013-08-271-1/+1
| | | | | | | Callers already account for TC_HDR_SIZE, do not add it twice. Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Simo Sorce <idra@samba.org>
* Start to fix talloc memlimits with talloc pools.Jeremy Allison2013-08-271-0/+72
| | | | | | | | | | | | | | | | | | | | | | Add the functions: talloc_memlimit_grow(), talloc_memlimit_shrink(), talloc_memlimit_update_on_free(). as replacements for talloc_memlimit_update(). The interface to talloc_memlimit_update() is very hard to understand and use. The above functions are (to me) much clearer. The goal of these changes is to only update the memlimits on malloc/free/realloc, not on every pool allocation. That way we only count pool creation as allocation from any imposed limits, not allocation from an already created pool. Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Simo Sorce <idra@samba.org>
* talloc: Fix a typoVolker Lendecke2013-05-201-1/+1
| | | | | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Kai Blin <kai@samba.org> Autobuild-User(master): Kai Blin <kai@samba.org> Autobuild-Date(master): Mon May 20 18:48:49 CEST 2013 on sn-devel-104
* talloc: Simplify _talloc_free_poolmem a bitVolker Lendecke2013-04-181-2/+14
| | | | | | | | | | Early returns are easier to understand than "else if" Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> Autobuild-User(master): Jeremy Allison <jra@samba.org> Autobuild-Date(master): Thu Apr 18 22:50:42 CEST 2013 on sn-devel-104
* talloc: Do an early returnVolker Lendecke2013-04-181-3/+6
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* talloc: Avoid some "else" by doing early returnsVolker Lendecke2013-04-181-4/+8
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* talloc: Fix nonblank line endingsVolker Lendecke2013-04-181-34/+34
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
* talloc: Convert error cecking macros into fnsSimo Sorce2012-10-051-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
* Add memory limiting capability to tallocSimo Sorce2012-10-051-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.
* talloc: don't allow a talloc_pool inside a talloc_pool.Rusty Russell2012-07-181-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>
* talloc: use a struct for pool headers.Rusty Russell2012-07-181-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>
* talloc: Fix copy&paste errorsVolker Lendecke2012-04-241-2/+2
|
* talloc: Slightly simplify talloc_unlinkVolker Lendecke2012-01-021-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
* talloc: Fix a typoVolker Lendecke2012-01-021-3/+3
|
* talloc: fix a comment typoMichael Adam2011-10-261-1/+1
|
* talloc: Remove an unused variableVolker Lendecke2011-09-071-1/+0
| | | | | Autobuild-User: Volker Lendecke <vlendec@samba.org> Autobuild-Date: Wed Sep 7 16:47:26 CEST 2011 on sn-devel-104
* talloc: ensure the sibling linked list remains valid during a freeAndrew Tridgell2011-08-091-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
* talloc: preserve context name on talloc_free_children()Simo Sorce2011-07-291-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>
* talloc: splitout _talloc_free_children_internal()Stefan Metzmacher2011-05-171-50/+27
| | | | | | | metze Autobuild-User: Stefan Metzmacher <metze@samba.org> Autobuild-Date: Tue May 17 10:49:13 CEST 2011 on sn-devel-104
* talloc: fixed a use after free error in talloc_free_children()Stefan Metzmacher2011-05-171-1/+16
| | | | | | This is similar to commit 6f51a1f45bf4de062cce7a562477e8140630a53d. metze
* talloc: use _talloc_free_internal() in talloc_free_children()Stefan Metzmacher2011-05-171-1/+1
| | | | metze
* talloc: setup the new 'tc' before TC_UNDEFINE_GROW_CHUNK() _talloc_realloc()Stefan Metzmacher2011-05-171-0/+1
| | | | metze
* talloc: make really sure only optimize realloc if there's only one pool chunkStefan Metzmacher2011-05-171-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
* talloc: make use of _talloc_free_poolmem() in _talloc_realloc()Stefan Metzmacher2011-05-171-15/+1
| | | | | | This should follow the same logic... metze
* talloc: split the handling of FLAG_POOL/FLAG_POOLMEM in _talloc_free_internalStefan Metzmacher2011-05-171-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
* talloc: use TC_UNDEFINE_SHRINK_CHUNK() instead of ↵Stefan Metzmacher2011-05-021-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
* talloc: fix compiler warnings with -Wc++-compatStefan Metzmacher2011-04-131-5/+5
| | | | | | | metze Autobuild-User: Stefan Metzmacher <metze@samba.org> Autobuild-Date: Wed Apr 13 14:33:23 CEST 2011 on sn-devel-104
* talloc: include valgrind headers if availableStefan Metzmacher2011-04-081-0/+9
| | | | | | metze Signed-off-By: Andrew Tridgell <tridge@samba.org>
* talloc: add TC_INVALIDATE_POOL marcoStefan Metzmacher2011-04-081-3/+38
| | | | | | metze Signed-off-By: Andrew Tridgell <tridge@samba.org>
* talloc: add TC_UNDEFINE_GROW_CHUNK() marcoStefan Metzmacher2011-04-081-0/+21
| | | | | | metze Signed-off-By: Andrew Tridgell <tridge@samba.org>