svn commit: samba r11961 - in trunk/source: . lib utils
Jeremy Allison
jra at samba.org
Wed Nov 30 00:20:55 GMT 2005
On Wed, Nov 30, 2005 at 11:14:39AM +1100, tridge at samba.org wrote:
> Jeremy,
>
> > re-add the talloc_describe_all() function.
>
> It looks like this is a copy of the talloc_report_full() function, but
> with a different output routine. Perhaps we are better off creating a
> a varient of talloc_report_*() that takes a function pointer?
>
> This function pointer could either be a fprintf() style of function,
> but with a void* private pointer for the 'file', or we could instead
> make it a function that takes the details of a specific allocation as
> arguments, and allows the caller to format it as they wish.
>
> I think the latter is probably more useful, particularly as it allows
> for things like GUIs, web interfaces etc, without them having to try
> and parse the human-readable output.
>
> So, how about this for a interface:
>
> void talloc_report_function(void *ptr, talloc_report_fn_t fn, void *private);
>
> typedef void (*talloc_report_fn_t)(void *, void *, size_t, const char *, int);
>
> a simple report function would be:
>
> void my_report(void *private, void *ptr, size_t size, const char *name, int is_reference)
> {
> if (is_reference) {
> printf("reference to %p\n", ptr);
> } else {
> printf("ptr %p of size %u has name '%s'\n", ptr, size, name);
> }
> }
>
> talloc_report_function() would only traverse the direct children of
> the pointer, leaving it up to the callback function to recurse if it
> wants to.
Yes, it's a copy of talloc_report_full, but uses a Samba3 specific output
function I don't think is available in Samba4. I originally tried to use
talloc_vasprintf_append() to build the output but kept getting valgrind
errors about reusing free'd memory. I think it was to do with trying to
print the string you're constructing as talloc_vasprintf_append() calls
talloc_set_name_const with the constructed string.... It ended up being
easier to use a malloc'ed area instead but wasn't as elegent.
I thought about making the void * a file but didn't want to mess with
existing working talloc code. That's a cleaner solution and if I had
more time I'd have done it :-). If you want to fix it up I'd appreciate
it :-).
Cheers,
Jeremy.
More information about the samba-technical
mailing list