[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: (ITS#4483) Confusion in freeing BerElement in abnormal conditions

ando@sys-net.it writes:
> I believe after this change the interface is much cleaner: if
> called with freeit set, ber_flush() always frees the BerElement,
> regardless of the return status.

That matches 'man ber_flush: "If the freeit parameter is non-zero,
the supplied ber will be freed after its contents have been flushed."

> In case the caller wants to handle errors, it has to call ber_flush()
> with freeit unset, and free it explicitly in case of success or handle
> it otherwise.

It looks to be that you just described that the ber_flush() function has
a somewhat cumbersome interface.  Would it be useful to make the freeit
parameter should an enum?  Values:
{ 0 => don't free,
  some unlikely magic number => free unless error,
  1 => free (the "official" name & value for freeing),
  default => also free, for backwards compat }