This is the mail archive of the sid@sources.redhat.com mailing list for the SID project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] Add Logging Support for SID Components




Frank Ch. Eigler wrote:

The new version seems to have at least one actual problem though:
the way that the buffer array is managed. Its allocation/deallocation
strategy should be consistent (probably "new char[]" and "delete[] char")
regardless of the availability of the various *sprintf variants. It should
probably not even be in #if/#endif markers. The new code appears to be
able to hit free() even though malloc() was never called.


The piece of information that you're probably missing is that vasprintf automatically allocates a buffer of the proper size each time it is called and it uses malloc. Thus free () is only called when using vasprintf (! HAVE_VSNPRINTF && HAVE_VASPRINTF). Otherwise (HAVE_VSNPRINTF || ! HAVE_VAPRINTF) a persistent buffer is used which can be grown if necessary only when vsnprintf is used. I chose to use new/delete here since I had a choice.

I have reviewed the code again and believe that it is correct. I can get the call to free() out of #if/#endif if I allocate a buffer everytime for all alternatives using malloc, but conditional compilation would still be necessary for the allocations/growth.

Let me know if you feel these changes are necessary.

Thanks,
Dave



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]