[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: [Q] attr.c bug?
At 03:27 PM 6/7/99 -0700, Alex Zeltser wrote:
>Just came across something that seemed strange. I'm doing some testing
>with the NT port of slapd. In attr.c, in attr_syntax_config the variable
>'at' is allocated with a call to ch_calloc. In the case of an error it is
>freed a few lines later with a call to free; in the case of no error, it is
>freed at the end of the function with ldap_memfree (which in turn calls
>ber_memfree).
In slapd, anything allocated with ch_* should be freed with free()...
For NT port (in the short term), I suggest #define free ch_free in
slap.h and implementing a ch_free() in ch_malloc.c. Then modify all ch_malloc() to call ber_mem* functions.
>Looking at implementations of ch_calloc and ber_memfree, it
>appears that the two are not compatible.
Depends on -DLDAP_MEMORY_DEBUG and the platform. Hence the
suggestion above.
>It seems ok to call free on a
>ch_calloc'ed ptr, but not ber_memfree. In my case, this triggered an
>assert. Has noone else run into this?
Ignoring LDAP_MEMORY_DEBUG, this behavior is specific to WIN32 and
hence why very few folks have ran into it... I believe ldap_memfree()
was originally invented to help resolve this issue.
>(As another aside, are ch_xalloc functions meant to only be used for
>allocations that _must_ succeed for the program to function properly?
No, they are meant to stop executation due to failure of the caller
to check return values.
>They all see to call 'exit' on allocation failures which seems a bit extreme
>under normal conditions.)
I concur... better memory allocation fault handling is on the
TODO list.