r3511: teh PAC used 8byte alignment
[Samba/gebeck_regimport.git] / talloc_guide.txt
bloba794cdffbe51cae1cf09a3773e553132cd627654
1 Using talloc in Samba4
2 ----------------------
4 Andrew Tridgell
5 September 2004
7 The most current version of this document is available at
8    http://samba.org/ftp/unpacked/samba4/talloc_guide.txt
10 If you are used to talloc from Samba3 then please read this carefully,
11 as talloc has changed a lot.
13 The new talloc is a hierarchical, reference counted memory pool system
14 with destructors. Quite a mounthful really, but not too bad once you
15 get used to it.
17 Perhaps the biggest change from Samba3 is that there is no distinction
18 between a "talloc context" and a "talloc pointer". Any pointer
19 returned from talloc() is itself a valid talloc context. This means
20 you can do this:
22   struct foo *X = talloc_p(mem_ctx, struct foo);
23   X->name = talloc_strdup(X, "foo");
25 and the pointer X->name would be a "child" of the talloc context "X"
26 which is itself a child of mem_ctx. So if you do talloc_free(mem_ctx)
27 then it is all destroyed, whereas if you do talloc_free(X) then just X
28 and X->name are destroyed, and if you do talloc_free(X->name) then
29 just the name element of X is destroyed.
31 If you think about this, then what this effectively gives you is an
32 n-ary tree, where you can free any part of the tree with
33 talloc_free().
35 If you find this confusing, then I suggest you run the LOCAL-TALLOC
36 smbtorture test to watch talloc in action. You may also like to add
37 your own tests to source/torture/local/talloc.c to clarify how some
38 particular situation is handled.
41 Performance
42 -----------
44 All the additional features of talloc() over malloc() do come at a
45 price. We have a simple performance test in Samba4 that measures
46 talloc() versus malloc() performance, and it seems that talloc() is
47 about 10% slower than malloc() on my x86 Debian Linux box. For Samba,
48 the great reduction in code complexity that we get by using talloc
49 makes this worthwhile, especially as the total overhead of
50 talloc/malloc in Samba is already quite small.
53 talloc API
54 ----------
56 The following is a complete guide to the talloc API. Read it all at
57 least twice.
60 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
61 void *talloc(const void *context, size_t size);
63 The talloc() function is the core of the talloc library. It takes a
64 memory context, and returns a pointer to a new area of memory of the
65 given size.
67 The returned pointer is itself a talloc context, so you can use it as
68 the context argument to more calls to talloc if you wish.
70 The returned pointer is a "child" of the supplied context. This means
71 that if you talloc_free() the context then the new child disappears as
72 well. Alternatively you can free just the child.
74 The context argument to talloc() can be NULL, in which case a new top
75 level context is created. 
78 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
79 void *talloc_p(const void *context, type);
81 The talloc_p() macro is the equivalent of 
83   (type *)talloc(ctx, sizeof(type))
85 You should use it in preference to talloc() whenever possible, as it
86 provides additional type safety. It also automatically calls the
87 talloc_set_name_const() function with the name being a string holding
88 the name of the type.
91 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
92 int talloc_free(void *ptr);
94 The talloc_free() function frees a piece of talloc memory, and all its
95 children. You can call talloc_free() on any pointer returned by
96 talloc().
98 The return value of talloc_free() indicates success or failure, with 0
99 returned for success and -1 for failure. The only possible failure
100 condition is if the pointer had a destructor attached to it and the
101 destructor returned -1. See talloc_set_destructor() for details on
102 destructors.
104 If this pointer has an additional parent when talloc_free() is called
105 then the memory is not actually released, but instead the most
106 recently established parent is destroyed. See talloc_reference() for
107 details on establishing additional parents.
109 For more control on which parent is removed, see talloc_unlink()
111 talloc_free() operates recursively on its children.
114 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
115 void *talloc_reference(const void *context, const void *ptr);
117 The talloc_reference() function makes "context" an additional parent
118 of "ptr".
120 The return value of talloc_reference() is always the original pointer
121 "ptr", unless talloc ran out of memory in creating the reference in
122 which case it will return NULL (each additional reference consumes
123 around 48 bytes of memory on intel x86 platforms).
125 After creating a reference you can free it in one of the following
126 ways:
128   - you can talloc_free() any parent of the original pointer. That
129     will reduce the number of parents of this pointer by 1, and will
130     cause this pointer to be freed if it runs out of parents.
132   - you can talloc_free() the pointer itself. That will destroy the
133     most recently established parent to the pointer and leave the
134     pointer as a child of its current parent.
136 For more control on which parent to remove, see talloc_unlink()
139 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
140 int talloc_unlink(const void *context, const void *ptr);
142 The talloc_unlink() function removes a specific parent from ptr. The
143 context passed must either be a context used in talloc_reference()
144 with this pointer, or must be a direct parent of ptr. 
146 Note that if the parent has already been removed using talloc_free()
147 then this function will fail and will return -1.
149 Usually you can just use talloc_free() instead of talloc_unlink(), but
150 sometimes it is useful to have the additional control on which parent
151 is removed.
154 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
155 void talloc_set_destructor(const void *ptr, int (*destructor)(void *));
157 The function talloc_set_destructor() sets the "destructor" for the
158 pointer "ptr". A destructor is a function that is called when the
159 memory used by a pointer is about to be released. The destructor
160 receives the pointer as an argument, and should return 0 for success
161 and -1 for failure.
163 The destructor can do anything it wants to, including freeing other
164 pieces of memory. A common use for destructors is to clean up
165 operating system resources (such as open file descriptors) contained
166 in the structure the destructor is placed on.
168 You can only place one destructor on a pointer. If you need more than
169 one destructor then you can create a zero-length child of the pointer
170 and place an additional destructor on that.
172 To remove a destructor call talloc_set_destructor() with NULL for the
173 destructor.
175 If your destructor attempts to talloc_free() the pointer that it is
176 the destructor for then talloc_free() will return -1 and the free will
177 be ignored. This would be a pointless operation anyway, as the
178 destructor is only called when the memory is just about to go away.
181 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
182 void talloc_increase_ref_count(const void *ptr);
184 The talloc_increase_ref_count(ptr) function is exactly equivalent to:
186   talloc_reference(NULL, ptr);
188 You can use either syntax, depending on which you think is clearer in
189 your code.
192 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
193 void talloc_set_name(const void *ptr, const char *fmt, ...);
195 Each talloc pointer has a "name". The name is used principally for
196 debugging purposes, although it is also possible to set and get the
197 name on a pointer in as a way of "marking" pointers in your code.
199 The main use for names on pointer is for "talloc reports". See
200 talloc_report() and talloc_report_full() for details. Also see
201 talloc_enable_leak_report() and talloc_enable_leak_report_full().
203 The talloc_set_name() function allocates memory as a child of the
204 pointer. It is logically equivalent to:
205   talloc_set_name_const(ptr, talloc_asprintf(ptr, fmt, ...));
207 Note that multiple calls to talloc_set_name() will allocate more
208 memory without releasing the name. All of the memory is released when
209 the ptr is freed using talloc_free().
212 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
213 void talloc_set_name_const(const void *ptr, const char *name);
215 The function talloc_set_name_const() is just like talloc_set_name(),
216 but it takes a string constant, and is much faster. It is extensively
217 used by the "auto naming" macros, such as talloc_p().
219 This function does not allocate any memory. It just copies the
220 supplied pointer into the internal representation of the talloc
221 ptr. This means you must not pass a name pointer to memory that will
222 disappear before the ptr is freed with talloc_free().
225 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
226 void *talloc_named(const void *context, size_t size, const char *fmt, ...);
228 The talloc_named() function creates a named talloc pointer. It is
229 equivalent to:
231    ptr = talloc(context, size);
232    talloc_set_name(ptr, fmt, ....);
235 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
236 void *talloc_named_const(const void *context, size_t size, const char *name);
238 This is equivalent to:
240    ptr = talloc(context, size);
241    talloc_set_name_const(ptr, name);
244 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
245 const char *talloc_get_name(const void *ptr);
247 This returns the current name for the given talloc pointer. See
248 talloc_set_name() for details.
251 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
252 void *talloc_init(const char *fmt, ...);
254 This function creates a zero length named talloc context as a top
255 level context. It is equivalent to:
257   talloc_named(NULL, 0, fmt, ...);
260 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
261 void *talloc_realloc(const void *context, void *ptr, size_t size);
263 The talloc_realloc() function changes the size of a talloc
264 pointer. It has the following equivalences:
266   talloc_realloc(context, NULL, size) ==> talloc(context, size);
267   talloc_realloc(context, ptr, 0)     ==> talloc_free(ptr);
269 The "context" argument is only used if "ptr" is not NULL, otherwise it
270 is ignored.
272 talloc_realloc() returns the new pointer, or NULL on failure. The call
273 will fail either due to a lack of memory, or because the pointer has
274 more than one parent (see talloc_reference()).
277 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
278 void *talloc_steal(const void *new_ctx, const void *ptr);
280 The talloc_steal() function changes the parent context of a talloc
281 pointer. It is typically used when the context that the pointer is
282 currently a child of is going to be freed and you wish to keep the
283 memory for a longer time. 
285 The talloc_steal() function returns the pointer that you pass it. It
286 does not have any failure modes.
288 NOTE: It is possible to produce loops in the parent/child relationship
289 if you are not careful with talloc_steal(). No guarantees are provided
290 as to your sanity or the safety of your data if you do this.
293 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
294 off_t talloc_total_size(const void *ptr);
296 The talloc_total_size() function returns the total size in bytes used
297 by this pointer and all child pointers. Mostly useful for debugging.
299 Passing NULL is allowed, but it will only give a meaningful result if
300 talloc_enable_leak_report() or talloc_enable_leak_report_full() has
301 been called.
304 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
305 off_t talloc_total_blocks(const void *ptr);
307 The talloc_total_blocks() function returns the total memory block
308 count used by this pointer and all child pointers. Mostly useful for
309 debugging.
311 Passing NULL is allowed, but it will only give a meaningful result if
312 talloc_enable_leak_report() or talloc_enable_leak_report_full() has
313 been called.
316 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
317 void talloc_report(const void *ptr, FILE *f);
319 The talloc_report() function prints a summary report of all memory
320 used by ptr. One line of report is printed for each immediate child of
321 ptr, showing the total memory and number of blocks used by that child.
323 You can pass NULL for the pointer, in which case a report is printed
324 for the top level memory context, but only if
325 talloc_enable_leak_report() or talloc_enable_leak_report_full() has
326 been called.
329 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
330 void talloc_report_full(const void *ptr, FILE *f);
332 This provides a more detailed report than talloc_report(). It will
333 recursively print the ensire tree of memory referenced by the
334 pointer. References in the tree are shown by giving the name of the
335 pointer that is referenced.
337 You can pass NULL for the pointer, in which case a report is printed
338 for the top level memory context, but only if
339 talloc_enable_leak_report() or talloc_enable_leak_report_full() has
340 been called.
343 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
344 void talloc_enable_leak_report(void);
346 This enables calling of talloc_report(NULL, stderr) when the program
347 exits. In Samba4 this is enabled by using the --leak-report command
348 line option.
350 For it to be useful, this function must be called before any other
351 talloc function as it establishes a "null context" that acts as the
352 top of the tree. If you don't call this function first then passing
353 NULL to talloc_report() or talloc_report_full() won't give you the
354 full tree printout.
356 Here is a typical talloc report:
358 talloc report on 'null_context' (total 267 bytes in 15 blocks)
359         libcli/auth/spnego_parse.c:55  contains     31 bytes in   2 blocks
360         libcli/auth/spnego_parse.c:55  contains     31 bytes in   2 blocks
361         iconv(UTF8,CP850)              contains     42 bytes in   2 blocks
362         libcli/auth/spnego_parse.c:55  contains     31 bytes in   2 blocks
363         iconv(CP850,UTF8)              contains     42 bytes in   2 blocks
364         iconv(UTF8,UTF-16LE)           contains     45 bytes in   2 blocks
365         iconv(UTF-16LE,UTF8)           contains     45 bytes in   2 blocks
368 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
369 void talloc_enable_leak_report_full(void);
371 This enables calling of talloc_report_full(NULL, stderr) when the
372 program exits. In Samba4 this is enabled by using the
373 --leak-report-full command line option.
375 For it to be useful, this function must be called before any other
376 talloc function as it establishes a "null context" that acts as the
377 top of the tree. If you don't call this function first then passing
378 NULL to talloc_report() or talloc_report_full() won't give you the
379 full tree printout.
381 Here is a typical full report:
383 full talloc report on 'root' (total 18 bytes in 8 blocks)
384     p1                             contains     18 bytes in   7 blocks (ref 0)
385         r1                             contains     13 bytes in   2 blocks (ref 0)
386             reference to: p2
387         p2                             contains      1 bytes in   1 blocks (ref 1)
388         x3                             contains      1 bytes in   1 blocks (ref 0)
389         x2                             contains      1 bytes in   1 blocks (ref 0)
390         x1                             contains      1 bytes in   1 blocks (ref 0)
393 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
394 void *talloc_zero(const void *ctx, size_t size);
396 The talloc_zero() function is equivalent to:
398   ptr = talloc(ctx, size);
399   if (ptr) memset(ptr, 0, size);
402 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
403 void *talloc_memdup(const void *ctx, const void *p, size_t size);
405 The talloc_memdup() function is equivalent to:
407   ptr = talloc(ctx, size);
408   if (ptr) memcpy(ptr, p, size);
411 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
412 char *talloc_strdup(const void *ctx, const char *p);
414 The talloc_strdup() function is equivalent to:
416   ptr = talloc(ctx, strlen(p)+1);
417   if (ptr) memcpy(ptr, p, strlen(p)+1);
419 This functions sets the name of the new pointer to the passed
420 string. This is equivalent to:
421    talloc_set_name_const(ptr, ptr)
423 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
424 char *talloc_strndup(const void *t, const char *p, size_t n);
426 The talloc_strndup() function is the talloc equivalent of the C
427 library function strndup()
429 This functions sets the name of the new pointer to the passed
430 string. This is equivalent to:
431    talloc_set_name_const(ptr, ptr)
434 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
435 char *talloc_vasprintf(const void *t, const char *fmt, va_list ap);
437 The talloc_vasprintf() function is the talloc equivalent of the C
438 library function vasprintf()
441 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
442 char *talloc_asprintf(const void *t, const char *fmt, ...);
444 The talloc_asprintf() function is the talloc equivalent of the C
445 library function asprintf()
447 This functions sets the name of the new pointer to the passed
448 string. This is equivalent to:
449    talloc_set_name_const(ptr, ptr)
452 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
453 char *talloc_asprintf_append(char *s, const char *fmt, ...);
455 The talloc_asprintf_append() function appends the given formatted 
456 string to the given string. 
459 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
460 void *talloc_array_p(const void *ctx, type, uint_t count);
462 The talloc_array_p() macro is equivalent to:
464   (type *)talloc(ctx, sizeof(type) * count);
466 except that it provides integer overflow protection for the multiply,
467 returning NULL if the multiply overflows.
470 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
471 void *talloc_realloc_p(const void *ctx, void *ptr, type, uint_t count);
473 The talloc_realloc_p() macro is equivalent to:
475   (type *)talloc_realloc(ctx, ptr, sizeof(type) * count);
477 except that it provides integer overflow protection for the multiply,
478 returning NULL if the multiply overflows.
481 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
482 void *talloc_realloc_fn(const void *ctx, void *ptr, size_t size);
484 This is a non-macro version of talloc_realloc(), which is useful 
485 as libraries sometimes want a ralloc function pointer. A realloc()
486 implementation encapsulates the functionality of malloc(), free() and
487 realloc() in one call, which is why it is useful to be able to pass
488 around a single function pointer.