> I've committed the first two patches. While I was at it, I threw in a
> couple more styleguide cleanups that I spotted with the second commit.
Thx.
>> sms-abort.patch.2
>> Adds an abort_fn member to the apr_sms_t. This
>> includes code calling the abort_fn, if present, on
>> APR_ENOMEM. The code to set the abort function is
>> not present yet. I added this to get sms one step
>> closer to apr pools.
>
> I'm wondering on this one if the abort function should have a prototype
> more like the one used by pools (ie, it should take just a status code
> rather than filename/linenum).
Ah, ok, I asked David about that before he left. I hope he doesn't mind
me quoting snippets here from what he said:
"
dreid> Why not stick to the standard apr format of
dreid>
dreid> apr_status_t abort_fn(char *sourcefile, int lineno);
striker> Ahh, there is such a function? I need to do a lot of digging into
APR.
[...]
striker> Btw, in apr_pools.h there is this:
striker> typedef int (*apr_abortfunc_t)(int retcode);
dreid> I'll have to review the code further to give more optinions, but if
you
dreid> try to stick with the standard format it'll make things better
dreid> and also allows for stacking of layers with errors not being lost
:)
striker> Uhuh, agreed. I'll see what I can do. By the way, my intention was
striker> to reflect the offending caller of the apr_sms_malloc() call in
striker> sourcefile and lineno by doing something like:
striker>
striker> #define apr_sms_malloc(sms, size) \
striker> apr_sms_malloc(sms, size, __FILE__, __LINE__)
striker>
striker> And to modify the apr_sms_malloc implementation accordingly. Would
this
striker> be usefull? I mean, this way you know which part of the code caused
the
striker> last memory allocation that made it abort.
striker>
striker> This ofcourse also goes for apr_sms_realloc and apr_sms_calloc.
"
> I'm really only hesitant because I don't
> know for sure whether or not __FILE__ and __LINE__ are universally
> available symbols across all preprocessors. Besides, knowing which file
> and line it aborted in isn't much help since it will always be within one
> of the memory functions, when we're more interested in which file and line
> *called* the memory allocation function that failed (I think).
>
> Thoughts?
Yes, I wanted to do something like this:
#define apr_sms_malloc(mem_sys, size) \
apr_sms_malloc(mem_sys, size, __FILE__, __LINE__)
And change the prototype to:
APR_DECLARE(void *) apr_sms_malloc(apr_sms_t *sms, apr_size_t size,
char *sourcefile, int lineno);
The only problem is that the memory systems themselves will need the
extra parameters too, otherwise it won't bubble up. So that's why I
didn't want to do this yet, because I'm not sure this is what is
wanted.
And ofcourse apr_sms_malloc is just the first, calloc and realloc
would have to be done too.
And then I start to wonder if we don't just want to do this to
all memory system functions (like free, reset, destroy), so someone
can implement a decent profiling/logging memory system.
As for the __FILE__ and __LINE__ symbols, I have yet to meet a
compiler package that doesn't support them. On the other hand I have
only seen a few: gcc (on Linux), VC++ (Winxxx), and a series of small
(mostly) unknow ones these and other platforms (Amiga). It is ANSI
standard... (I did not bring this up by the way :-).
Someone out there know of one that doesn't support them, please speak
up.
[...]
> Thanks,
> --Cliff
Sander