source: branches/samba-3.0/source/lib/talloc/talloc_guide.txt

Last change on this file was 1, checked in by Paul Smedley, 18 years ago

Initial code import

File size: 24.7 KB
Line 
1Using talloc in Samba4
2----------------------
3
4Andrew Tridgell
5September 2004
6
7The most current version of this document is available at
8 http://samba.org/ftp/unpacked/samba4/source/lib/talloc/talloc_guide.txt
9
10If you are used to the "old" talloc from Samba3 before 3.0.20 then please read
11this carefully, as talloc has changed a lot. With 3.0.20 (or 3.0.14?) the
12Samba4 talloc has been ported back to Samba3, so this guide applies to both.
13
14The new talloc is a hierarchical, reference counted memory pool system
15with destructors. Quite a mounthful really, but not too bad once you
16get used to it.
17
18Perhaps the biggest change from Samba3 is that there is no distinction
19between a "talloc context" and a "talloc pointer". Any pointer
20returned from talloc() is itself a valid talloc context. This means
21you can do this:
22
23 struct foo *X = talloc(mem_ctx, struct foo);
24 X->name = talloc_strdup(X, "foo");
25
26and the pointer X->name would be a "child" of the talloc context "X"
27which is itself a child of mem_ctx. So if you do talloc_free(mem_ctx)
28then it is all destroyed, whereas if you do talloc_free(X) then just X
29and X->name are destroyed, and if you do talloc_free(X->name) then
30just the name element of X is destroyed.
31
32If you think about this, then what this effectively gives you is an
33n-ary tree, where you can free any part of the tree with
34talloc_free().
35
36If you find this confusing, then I suggest you run the testsuite to
37watch talloc in action. You may also like to add your own tests to
38testsuite.c to clarify how some particular situation is handled.
39
40
41Performance
42-----------
43
44All the additional features of talloc() over malloc() do come at a
45price. We have a simple performance test in Samba4 that measures
46talloc() versus malloc() performance, and it seems that talloc() is
47about 4% slower than malloc() on my x86 Debian Linux box. For Samba,
48the great reduction in code complexity that we get by using talloc
49makes this worthwhile, especially as the total overhead of
50talloc/malloc in Samba is already quite small.
51
52
53talloc API
54----------
55
56The following is a complete guide to the talloc API. Read it all at
57least twice.
58
59Multi-threading
60---------------
61
62talloc itself does not deal with threads. It is thread-safe (assuming
63the underlying "malloc" is), as long as each thread uses different
64memory contexts.
65If two threads uses the same context then they need to synchronize in
66order to be safe. In particular:
67- when using talloc_enable_leak_report(), giving directly NULL as a
68parent context implicitly refers to a hidden "null context" global
69variable, so this should not be used in a multi-threaded environment
70without proper synchronization ;
71- the context returned by talloc_autofree_context() is also global so
72shouldn't be used by several threads simultaneously without
73synchronization.
74
75
76=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
77(type *)talloc(const void *context, type);
78
79The talloc() macro is the core of the talloc library. It takes a
80memory context and a type, and returns a pointer to a new area of
81memory of the given type.
82
83The returned pointer is itself a talloc context, so you can use it as
84the context argument to more calls to talloc if you wish.
85
86The returned pointer is a "child" of the supplied context. This means
87that if you talloc_free() the context then the new child disappears as
88well. Alternatively you can free just the child.
89
90The context argument to talloc() can be NULL, in which case a new top
91level context is created.
92
93
94=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
95void *talloc_size(const void *context, size_t size);
96
97The function talloc_size() should be used when you don't have a
98convenient type to pass to talloc(). Unlike talloc(), it is not type
99safe (as it returns a void *), so you are on your own for type checking.
100
101=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
102(typeof(ptr)) talloc_ptrtype(const void *ctx, ptr);
103
104The talloc_ptrtype() macro should be used when you have a pointer and
105want to allocate memory to point at with this pointer. When compiling
106with gcc >= 3 it is typesafe. Note this is a wrapper of talloc_size()
107and talloc_get_name() will return the current location in the source file.
108and not the type.
109
110=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
111int talloc_free(void *ptr);
112
113The talloc_free() function frees a piece of talloc memory, and all its
114children. You can call talloc_free() on any pointer returned by
115talloc().
116
117The return value of talloc_free() indicates success or failure, with 0
118returned for success and -1 for failure. The only possible failure
119condition is if the pointer had a destructor attached to it and the
120destructor returned -1. See talloc_set_destructor() for details on
121destructors.
122
123If this pointer has an additional parent when talloc_free() is called
124then the memory is not actually released, but instead the most
125recently established parent is destroyed. See talloc_reference() for
126details on establishing additional parents.
127
128For more control on which parent is removed, see talloc_unlink()
129
130talloc_free() operates recursively on its children.
131
132
133=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
134int talloc_free_children(void *ptr);
135
136The talloc_free_children() walks along the list of all children of a
137talloc context and talloc_free()s only the children, not the context
138itself.
139
140
141=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
142void *talloc_reference(const void *context, const void *ptr);
143
144The talloc_reference() function makes "context" an additional parent
145of "ptr".
146
147The return value of talloc_reference() is always the original pointer
148"ptr", unless talloc ran out of memory in creating the reference in
149which case it will return NULL (each additional reference consumes
150around 48 bytes of memory on intel x86 platforms).
151
152If "ptr" is NULL, then the function is a no-op, and simply returns NULL.
153
154After creating a reference you can free it in one of the following
155ways:
156
157 - you can talloc_free() any parent of the original pointer. That
158 will reduce the number of parents of this pointer by 1, and will
159 cause this pointer to be freed if it runs out of parents.
160
161 - you can talloc_free() the pointer itself. That will destroy the
162 most recently established parent to the pointer and leave the
163 pointer as a child of its current parent.
164
165For more control on which parent to remove, see talloc_unlink()
166
167
168=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
169int talloc_unlink(const void *context, const void *ptr);
170
171The talloc_unlink() function removes a specific parent from ptr. The
172context passed must either be a context used in talloc_reference()
173with this pointer, or must be a direct parent of ptr.
174
175Note that if the parent has already been removed using talloc_free()
176then this function will fail and will return -1. Likewise, if "ptr"
177is NULL, then the function will make no modifications and return -1.
178
179Usually you can just use talloc_free() instead of talloc_unlink(), but
180sometimes it is useful to have the additional control on which parent
181is removed.
182
183
184=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
185void talloc_set_destructor(const void *ptr, int (*destructor)(void *));
186
187The function talloc_set_destructor() sets the "destructor" for the
188pointer "ptr". A destructor is a function that is called when the
189memory used by a pointer is about to be released. The destructor
190receives the pointer as an argument, and should return 0 for success
191and -1 for failure.
192
193The destructor can do anything it wants to, including freeing other
194pieces of memory. A common use for destructors is to clean up
195operating system resources (such as open file descriptors) contained
196in the structure the destructor is placed on.
197
198You can only place one destructor on a pointer. If you need more than
199one destructor then you can create a zero-length child of the pointer
200and place an additional destructor on that.
201
202To remove a destructor call talloc_set_destructor() with NULL for the
203destructor.
204
205If your destructor attempts to talloc_free() the pointer that it is
206the destructor for then talloc_free() will return -1 and the free will
207be ignored. This would be a pointless operation anyway, as the
208destructor is only called when the memory is just about to go away.
209
210
211=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
212int talloc_increase_ref_count(const void *ptr);
213
214The talloc_increase_ref_count(ptr) function is exactly equivalent to:
215
216 talloc_reference(NULL, ptr);
217
218You can use either syntax, depending on which you think is clearer in
219your code.
220
221It returns 0 on success and -1 on failure.
222
223=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
224size_t talloc_reference_count(const void *ptr);
225
226Return the number of references to the pointer.
227
228=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
229void talloc_set_name(const void *ptr, const char *fmt, ...);
230
231Each talloc pointer has a "name". The name is used principally for
232debugging purposes, although it is also possible to set and get the
233name on a pointer in as a way of "marking" pointers in your code.
234
235The main use for names on pointer is for "talloc reports". See
236talloc_report() and talloc_report_full() for details. Also see
237talloc_enable_leak_report() and talloc_enable_leak_report_full().
238
239The talloc_set_name() function allocates memory as a child of the
240pointer. It is logically equivalent to:
241 talloc_set_name_const(ptr, talloc_asprintf(ptr, fmt, ...));
242
243Note that multiple calls to talloc_set_name() will allocate more
244memory without releasing the name. All of the memory is released when
245the ptr is freed using talloc_free().
246
247
248=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
249void talloc_set_name_const(const void *ptr, const char *name);
250
251The function talloc_set_name_const() is just like talloc_set_name(),
252but it takes a string constant, and is much faster. It is extensively
253used by the "auto naming" macros, such as talloc_p().
254
255This function does not allocate any memory. It just copies the
256supplied pointer into the internal representation of the talloc
257ptr. This means you must not pass a name pointer to memory that will
258disappear before the ptr is freed with talloc_free().
259
260
261=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
262void *talloc_named(const void *context, size_t size, const char *fmt, ...);
263
264The talloc_named() function creates a named talloc pointer. It is
265equivalent to:
266
267 ptr = talloc_size(context, size);
268 talloc_set_name(ptr, fmt, ....);
269
270
271=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
272void *talloc_named_const(const void *context, size_t size, const char *name);
273
274This is equivalent to:
275
276 ptr = talloc_size(context, size);
277 talloc_set_name_const(ptr, name);
278
279
280=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
281const char *talloc_get_name(const void *ptr);
282
283This returns the current name for the given talloc pointer. See
284talloc_set_name() for details.
285
286
287=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
288void *talloc_init(const char *fmt, ...);
289
290This function creates a zero length named talloc context as a top
291level context. It is equivalent to:
292
293 talloc_named(NULL, 0, fmt, ...);
294
295
296=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
297void *talloc_new(void *ctx);
298
299This is a utility macro that creates a new memory context hanging
300off an exiting context, automatically naming it "talloc_new: __location__"
301where __location__ is the source line it is called from. It is
302particularly useful for creating a new temporary working context.
303
304
305=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
306(type *)talloc_realloc(const void *context, void *ptr, type, count);
307
308The talloc_realloc() macro changes the size of a talloc
309pointer. The "count" argument is the number of elements of type "type"
310that you want the resulting pointer to hold.
311
312talloc_realloc() has the following equivalences:
313
314 talloc_realloc(context, NULL, type, 1) ==> talloc(context, type);
315 talloc_realloc(context, NULL, type, N) ==> talloc_array(context, type, N);
316 talloc_realloc(context, ptr, type, 0) ==> talloc_free(ptr);
317
318The "context" argument is only used if "ptr" is NULL, otherwise it is
319ignored.
320
321talloc_realloc() returns the new pointer, or NULL on failure. The call
322will fail either due to a lack of memory, or because the pointer has
323more than one parent (see talloc_reference()).
324
325
326=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
327void *talloc_realloc_size(const void *context, void *ptr, size_t size);
328
329the talloc_realloc_size() function is useful when the type is not
330known so the typesafe talloc_realloc() cannot be used.
331
332
333=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
334void *talloc_steal(const void *new_ctx, const void *ptr);
335
336The talloc_steal() function changes the parent context of a talloc
337pointer. It is typically used when the context that the pointer is
338currently a child of is going to be freed and you wish to keep the
339memory for a longer time.
340
341The talloc_steal() function returns the pointer that you pass it. It
342does not have any failure modes.
343
344NOTE: It is possible to produce loops in the parent/child relationship
345if you are not careful with talloc_steal(). No guarantees are provided
346as to your sanity or the safety of your data if you do this.
347
348talloc_steal (new_ctx, NULL) will return NULL with no sideeffects.
349
350=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
351size_t talloc_total_size(const void *ptr);
352
353The talloc_total_size() function returns the total size in bytes used
354by this pointer and all child pointers. Mostly useful for debugging.
355
356Passing NULL is allowed, but it will only give a meaningful result if
357talloc_enable_leak_report() or talloc_enable_leak_report_full() has
358been called.
359
360
361=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
362size_t talloc_total_blocks(const void *ptr);
363
364The talloc_total_blocks() function returns the total memory block
365count used by this pointer and all child pointers. Mostly useful for
366debugging.
367
368Passing NULL is allowed, but it will only give a meaningful result if
369talloc_enable_leak_report() or talloc_enable_leak_report_full() has
370been called.
371
372=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
373void talloc_report_depth_cb(const void *ptr, int depth, int max_depth,
374 void (*callback)(const void *ptr,
375 int depth, int max_depth,
376 int is_ref,
377 void *priv),
378 void *priv);
379
380This provides a more flexible reports than talloc_report(). It
381will recursively call the callback for the entire tree of memory
382referenced by the pointer. References in the tree are passed with
383is_ref = 1 and the pointer that is referenced.
384
385You can pass NULL for the pointer, in which case a report is
386printed for the top level memory context, but only if
387talloc_enable_leak_report() or talloc_enable_leak_report_full()
388has been called.
389
390The recursion is stopped when depth >= max_depth.
391max_depth = -1 means only stop at leaf nodes.
392
393
394=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
395void talloc_report_depth_file(const void *ptr, int depth, int max_depth, FILE *f);
396
397This provides a more flexible reports than talloc_report(). It
398will let you specify the depth and max_depth.
399
400
401=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
402void talloc_report(const void *ptr, FILE *f);
403
404The talloc_report() function prints a summary report of all memory
405used by ptr. One line of report is printed for each immediate child of
406ptr, showing the total memory and number of blocks used by that child.
407
408You can pass NULL for the pointer, in which case a report is printed
409for the top level memory context, but only if
410talloc_enable_leak_report() or talloc_enable_leak_report_full() has
411been called.
412
413
414=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
415void talloc_report_full(const void *ptr, FILE *f);
416
417This provides a more detailed report than talloc_report(). It will
418recursively print the ensire tree of memory referenced by the
419pointer. References in the tree are shown by giving the name of the
420pointer that is referenced.
421
422You can pass NULL for the pointer, in which case a report is printed
423for the top level memory context, but only if
424talloc_enable_leak_report() or talloc_enable_leak_report_full() has
425been called.
426
427
428=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
429void talloc_enable_leak_report(void);
430
431This enables calling of talloc_report(NULL, stderr) when the program
432exits. In Samba4 this is enabled by using the --leak-report command
433line option.
434
435For it to be useful, this function must be called before any other
436talloc function as it establishes a "null context" that acts as the
437top of the tree. If you don't call this function first then passing
438NULL to talloc_report() or talloc_report_full() won't give you the
439full tree printout.
440
441Here is a typical talloc report:
442
443talloc report on 'null_context' (total 267 bytes in 15 blocks)
444 libcli/auth/spnego_parse.c:55 contains 31 bytes in 2 blocks
445 libcli/auth/spnego_parse.c:55 contains 31 bytes in 2 blocks
446 iconv(UTF8,CP850) contains 42 bytes in 2 blocks
447 libcli/auth/spnego_parse.c:55 contains 31 bytes in 2 blocks
448 iconv(CP850,UTF8) contains 42 bytes in 2 blocks
449 iconv(UTF8,UTF-16LE) contains 45 bytes in 2 blocks
450 iconv(UTF-16LE,UTF8) contains 45 bytes in 2 blocks
451
452
453=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
454void talloc_enable_leak_report_full(void);
455
456This enables calling of talloc_report_full(NULL, stderr) when the
457program exits. In Samba4 this is enabled by using the
458--leak-report-full command line option.
459
460For it to be useful, this function must be called before any other
461talloc function as it establishes a "null context" that acts as the
462top of the tree. If you don't call this function first then passing
463NULL to talloc_report() or talloc_report_full() won't give you the
464full tree printout.
465
466Here is a typical full report:
467
468full talloc report on 'root' (total 18 bytes in 8 blocks)
469 p1 contains 18 bytes in 7 blocks (ref 0)
470 r1 contains 13 bytes in 2 blocks (ref 0)
471 reference to: p2
472 p2 contains 1 bytes in 1 blocks (ref 1)
473 x3 contains 1 bytes in 1 blocks (ref 0)
474 x2 contains 1 bytes in 1 blocks (ref 0)
475 x1 contains 1 bytes in 1 blocks (ref 0)
476
477
478=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
479void talloc_enable_null_tracking(void);
480
481This enables tracking of the NULL memory context without enabling leak
482reporting on exit. Useful for when you want to do your own leak
483reporting call via talloc_report_null_full();
484
485=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
486void talloc_disable_null_tracking(void);
487
488This disables tracking of the NULL memory context.
489
490=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
491(type *)talloc_zero(const void *ctx, type);
492
493The talloc_zero() macro is equivalent to:
494
495 ptr = talloc(ctx, type);
496 if (ptr) memset(ptr, 0, sizeof(type));
497
498
499=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
500void *talloc_zero_size(const void *ctx, size_t size)
501
502The talloc_zero_size() function is useful when you don't have a known type
503
504
505=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
506void *talloc_memdup(const void *ctx, const void *p, size_t size);
507
508The talloc_memdup() function is equivalent to:
509
510 ptr = talloc_size(ctx, size);
511 if (ptr) memcpy(ptr, p, size);
512
513
514=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
515char *talloc_strdup(const void *ctx, const char *p);
516
517The talloc_strdup() function is equivalent to:
518
519 ptr = talloc_size(ctx, strlen(p)+1);
520 if (ptr) memcpy(ptr, p, strlen(p)+1);
521
522This functions sets the name of the new pointer to the passed
523string. This is equivalent to:
524 talloc_set_name_const(ptr, ptr)
525
526=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
527char *talloc_strndup(const void *t, const char *p, size_t n);
528
529The talloc_strndup() function is the talloc equivalent of the C
530library function strndup()
531
532This functions sets the name of the new pointer to the passed
533string. This is equivalent to:
534 talloc_set_name_const(ptr, ptr)
535
536
537=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
538char *talloc_vasprintf(const void *t, const char *fmt, va_list ap);
539
540The talloc_vasprintf() function is the talloc equivalent of the C
541library function vasprintf()
542
543
544=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
545char *talloc_asprintf(const void *t, const char *fmt, ...);
546
547The talloc_asprintf() function is the talloc equivalent of the C
548library function asprintf()
549
550This functions sets the name of the new pointer to the passed
551string. This is equivalent to:
552 talloc_set_name_const(ptr, ptr)
553
554
555=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
556char *talloc_asprintf_append(char *s, const char *fmt, ...);
557
558The talloc_asprintf_append() function appends the given formatted
559string to the given string.
560
561
562=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
563(type *)talloc_array(const void *ctx, type, uint_t count);
564
565The talloc_array() macro is equivalent to:
566
567 (type *)talloc_size(ctx, sizeof(type) * count);
568
569except that it provides integer overflow protection for the multiply,
570returning NULL if the multiply overflows.
571
572
573=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
574void *talloc_array_size(const void *ctx, size_t size, uint_t count);
575
576The talloc_array_size() function is useful when the type is not
577known. It operates in the same way as talloc_array(), but takes a size
578instead of a type.
579
580=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
581(typeof(ptr)) talloc_array_ptrtype(const void *ctx, ptr, uint_t count);
582
583The talloc_ptrtype() macro should be used when you have a pointer to an array
584and want to allocate memory of an array to point at with this pointer. When compiling
585with gcc >= 3 it is typesafe. Note this is a wrapper of talloc_array_size()
586and talloc_get_name() will return the current location in the source file.
587and not the type.
588
589=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
590void *talloc_realloc_fn(const void *ctx, void *ptr, size_t size);
591
592This is a non-macro version of talloc_realloc(), which is useful
593as libraries sometimes want a ralloc function pointer. A realloc()
594implementation encapsulates the functionality of malloc(), free() and
595realloc() in one call, which is why it is useful to be able to pass
596around a single function pointer.
597
598
599=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
600void *talloc_autofree_context(void);
601
602This is a handy utility function that returns a talloc context
603which will be automatically freed on program exit. This can be used
604to reduce the noise in memory leak reports.
605
606
607=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
608void *talloc_check_name(const void *ptr, const char *name);
609
610This function checks if a pointer has the specified name. If it does
611then the pointer is returned. It it doesn't then NULL is returned.
612
613
614=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
615(type *)talloc_get_type(const void *ptr, type);
616
617This macro allows you to do type checking on talloc pointers. It is
618particularly useful for void* private pointers. It is equivalent to
619this:
620
621 (type *)talloc_check_name(ptr, #type)
622
623
624=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
625talloc_set_type(const void *ptr, type);
626
627This macro allows you to force the name of a pointer to be a
628particular type. This can be used in conjunction with
629talloc_get_type() to do type checking on void* pointers.
630
631It is equivalent to this:
632 talloc_set_name_const(ptr, #type)
633
634=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
635talloc_get_size(const void *ctx);
636
637This function lets you know the amount of memory alloced so far by
638this context. It does NOT account for subcontext memory.
639This can be used to calculate the size of an array.
640
641=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
642void *talloc_find_parent_byname(const void *ctx, const char *name);
643
644Find a parent memory context of the current context that has the given
645name. This can be very useful in complex programs where it may be
646difficult to pass all information down to the level you need, but you
647know the structure you want is a parent of another context.
648
649=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
650(type *)talloc_find_parent_bytype(ctx, type);
651
652Like talloc_find_parent_byname() but takes a type, making it typesafe.
653
Note: See TracBrowser for help on using the repository browser.