On Dec 18, 2015, at 12:35 AM, Thomas Stüfe <thomas.stu...@gmail.com> wrote:
> 
> Neither advantage nor disadvantage: you keep the TLS-anchored buffer around. 
> This is nice because next time you log you save an allocation call, but needs 
> to be managed to not be a memory drain. For instance, in 
> commit_multiline_message() the buffer should be cut back to certain maximum 
> size.
> 
> I am unsure which approach I find better - the one where the caller creates 
> an explicit buffer or the one where the logging system manages the buffer. 
> Any would be fine for us.

The approaches can be combined:  Require the user to link the transaction 
together explicitly (in my example) but allow the transaction object 
(LogBuffer) to reuse a stashed thread-local buffer.

Actually, for HotSpot, it's likely that a thread-local ResourceArea would often 
be the best fit, since blocks in those are cheap to allocate and free.

I view the implicit addressing of the transaction buffer (in your code) as a 
special disadvantage, because it forces all log calls to check foir a 
thread-local condition (running transaction).  That's probably what you meant 
by forcing everybody to pay the cost for the feature.

The UL code is a veritable hive of templatery.  A few more templates will give 
us a static distinction between log channels that are stateless and those which 
buffer, with little or no apparent difference to the user.

— John

Reply via email to