r3548: removed extra net/if.h include
[ira/wip.git] / talloc_guide.txt
1 Using talloc in Samba4
2 ----------------------
3
4 Andrew Tridgell
5 September 2004
6
7 The most current version of this document is available at
8    http://samba.org/ftp/unpacked/samba4/talloc_guide.txt
9
10 If you are used to talloc from Samba3 then please read this carefully,
11 as talloc has changed a lot.
12
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.
16
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:
21
22   struct foo *X = talloc_p(mem_ctx, struct foo);
23   X->name = talloc_strdup(X, "foo");
24
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.
30
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().
34
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.
39
40
41 Performance
42 -----------
43
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.
51
52
53 talloc API
54 ----------
55
56 The following is a complete guide to the talloc API. Read it all at
57 least twice.
58
59
60 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
61 void *talloc(const void *context, size_t size);
62
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.
66
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.
69
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.
73
74 The context argument to talloc() can be NULL, in which case a new top
75 level context is created. 
76
77
78 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
79 void *talloc_p(const void *context, type);
80
81 The talloc_p() macro is the equivalent of 
82
83   (type *)talloc(ctx, sizeof(type))
84
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.
89
90
91 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
92 int talloc_free(void *ptr);
93
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().
97
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.
103
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.
108
109 For more control on which parent is removed, see talloc_unlink()
110
111 talloc_free() operates recursively on its children.
112
113
114 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
115 void *talloc_reference(const void *context, const void *ptr);
116
117 The talloc_reference() function makes "context" an additional parent
118 of "ptr".
119
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).
124
125 After creating a reference you can free it in one of the following
126 ways:
127
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.
131
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.
135
136 For more control on which parent to remove, see talloc_unlink()
137
138
139 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
140 int talloc_unlink(const void *context, const void *ptr);
141
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. 
145
146 Note that if the parent has already been removed using talloc_free()
147 then this function will fail and will return -1.
148
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.
152
153
154 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
155 void talloc_set_destructor(const void *ptr, int (*destructor)(void *));
156
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.
162
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.
167
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.
171
172 To remove a destructor call talloc_set_destructor() with NULL for the
173 destructor.
174
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.
179
180
181 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
182 void talloc_increase_ref_count(const void *ptr);
183
184 The talloc_increase_ref_count(ptr) function is exactly equivalent to:
185
186   talloc_reference(NULL, ptr);
187
188 You can use either syntax, depending on which you think is clearer in
189 your code.
190
191
192 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
193 void talloc_set_name(const void *ptr, const char *fmt, ...);
194
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.
198
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().
202
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, ...));
206
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().
210
211
212 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
213 void talloc_set_name_const(const void *ptr, const char *name);
214
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().
218
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().
223
224
225 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
226 void *talloc_named(const void *context, size_t size, const char *fmt, ...);
227
228 The talloc_named() function creates a named talloc pointer. It is
229 equivalent to:
230
231    ptr = talloc(context, size);
232    talloc_set_name(ptr, fmt, ....);
233
234
235 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
236 void *talloc_named_const(const void *context, size_t size, const char *name);
237
238 This is equivalent to:
239
240    ptr = talloc(context, size);
241    talloc_set_name_const(ptr, name);
242
243
244 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
245 const char *talloc_get_name(const void *ptr);
246
247 This returns the current name for the given talloc pointer. See
248 talloc_set_name() for details.
249
250
251 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
252 void *talloc_init(const char *fmt, ...);
253
254 This function creates a zero length named talloc context as a top
255 level context. It is equivalent to:
256
257   talloc_named(NULL, 0, fmt, ...);
258
259
260 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
261 void *talloc_realloc(const void *context, void *ptr, size_t size);
262
263 The talloc_realloc() function changes the size of a talloc
264 pointer. It has the following equivalences:
265
266   talloc_realloc(context, NULL, size) ==> talloc(context, size);
267   talloc_realloc(context, ptr, 0)     ==> talloc_free(ptr);
268
269 The "context" argument is only used if "ptr" is not NULL, otherwise it
270 is ignored.
271
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()).
275
276
277 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
278 void *talloc_steal(const void *new_ctx, const void *ptr);
279
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. 
284
285 The talloc_steal() function returns the pointer that you pass it. It
286 does not have any failure modes.
287
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.
291
292
293 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
294 off_t talloc_total_size(const void *ptr);
295
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.
298
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.
302
303
304 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
305 off_t talloc_total_blocks(const void *ptr);
306
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.
310
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.
314
315
316 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
317 void talloc_report(const void *ptr, FILE *f);
318
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.
322
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.
327
328
329 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
330 void talloc_report_full(const void *ptr, FILE *f);
331
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.
336
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.
341
342
343 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
344 void talloc_enable_leak_report(void);
345
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.
349
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.
355
356 Here is a typical talloc report:
357
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
366
367
368 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
369 void talloc_enable_leak_report_full(void);
370
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.
374
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.
380
381 Here is a typical full report:
382
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)
391
392
393 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
394 void *talloc_zero(const void *ctx, size_t size);
395
396 The talloc_zero() function is equivalent to:
397
398   ptr = talloc(ctx, size);
399   if (ptr) memset(ptr, 0, size);
400
401
402 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
403 void *talloc_memdup(const void *ctx, const void *p, size_t size);
404
405 The talloc_memdup() function is equivalent to:
406
407   ptr = talloc(ctx, size);
408   if (ptr) memcpy(ptr, p, size);
409
410
411 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
412 char *talloc_strdup(const void *ctx, const char *p);
413
414 The talloc_strdup() function is equivalent to:
415
416   ptr = talloc(ctx, strlen(p)+1);
417   if (ptr) memcpy(ptr, p, strlen(p)+1);
418
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)
422
423 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
424 char *talloc_strndup(const void *t, const char *p, size_t n);
425
426 The talloc_strndup() function is the talloc equivalent of the C
427 library function strndup()
428
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)
432
433
434 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
435 char *talloc_vasprintf(const void *t, const char *fmt, va_list ap);
436
437 The talloc_vasprintf() function is the talloc equivalent of the C
438 library function vasprintf()
439
440
441 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
442 char *talloc_asprintf(const void *t, const char *fmt, ...);
443
444 The talloc_asprintf() function is the talloc equivalent of the C
445 library function asprintf()
446
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)
450
451
452 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
453 char *talloc_asprintf_append(char *s, const char *fmt, ...);
454
455 The talloc_asprintf_append() function appends the given formatted 
456 string to the given string. 
457
458
459 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
460 void *talloc_array_p(const void *ctx, type, uint_t count);
461
462 The talloc_array_p() macro is equivalent to:
463
464   (type *)talloc(ctx, sizeof(type) * count);
465
466 except that it provides integer overflow protection for the multiply,
467 returning NULL if the multiply overflows.
468
469
470 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
471 void *talloc_realloc_p(const void *ctx, void *ptr, type, uint_t count);
472
473 The talloc_realloc_p() macro is equivalent to:
474
475   (type *)talloc_realloc(ctx, ptr, sizeof(type) * count);
476
477 except that it provides integer overflow protection for the multiply,
478 returning NULL if the multiply overflows.
479
480
481 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
482 void *talloc_realloc_fn(const void *ctx, void *ptr, size_t size);
483
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.
489