On 11/06/2016 01:15 AM, Kinkie wrote:
>>> + dest.reserveSpace(prefix.length() + totalContainerSize +
>>> suffix.length());
>>
>> Please note that v4 still allocates memory according to my last
>> experiment. See JoinContainerIntoSBuf3() which mimics your patch v4. You
>> may claim that the unnecessary allocation is not the fault of this
>> patch, and you could be right, but I was hoping this observation will
>> inspire you to change
>
> I don't follow. The space requirement in JoinContainerIntoSBuf is not
> advisory. The accumulate at the beginning of the function is meant to
> calculate exactly how much space is needed, to copy (if needed) only
> once and early.
What you say is true except for the "if needed" part. In some cases,
JoinContainerIntoSBuf() allocates and copies without needed. Those extra
allocations are present in v1, v2, v3, and v4 versions of the patch, but
the reasons behind those unnecessary allocations varied.
> The traces you provided do not reallocate there because the underlying
> MemBlob has grown enough in previous calls to have enough free space
> to cover the projected needs (it was resized last at
> JoinContainerIntoSBuf3).
No, "has grown enough" is not the reason why JoinContainerIntoSBuf4()
does not reallocate needlessly.
> In other words, the test data is dirtied as the tests progress.
My tests were indeed dirty (sorry) and could have easily led to wrong
conclusions, but they did not. The cleaned up version (attached) shows
exactly the same problem, this time without any effect of earlier tests
on later tests.
> This is correct behavior: the code advises that it only needs that
> much storage and the SBuf shrinks.
Violating explicit STL reserve() guarantees is rarely a good idea but,
for now, I will not argue about what reserveSpace() should do. I will
focus on JoinContainerIntoSBuf() instead.
Tests and code analysis show that JoinContainerIntoSBuf() allocates when
no allocation is needed. I have also shown that it is possible to
implement JoinContainerIntoSBuf() so that there is no extra allocation.
AFAICT, going forward, you choices are:
* state that the extra allocation is not your fault, leaving it as is,
and/or
* fix JoinContainerIntoSBuf() to avoid the extra allocation.
When you added the "dest" parameter, you have started moving in the
latter direction.
> As a demonstration, swapping order of tests 3 and 4 results in:
[Snipped wrong conclusions based on confusing dirty tests.
See cleaned up order-independent tests instead.]
> At the same time, it's not a matter of API: the extended
> reserve() has the same behavior as the "problem" is elsewhere.
Whether SBuf::reserve() has the same behavior as reserveSpace() depends
on reserve() configuration parameters.
JoinContainerIntoSBuf() should configure reserve() in such a way that
reserve() does _not_ have the same behavior as reserveSpace(). I showed
how to do that in JoinContainerIntoSBuf4() in my earlier patch. The
patch attached now has an even simpler JoinContainerIntoSBuf5()
implementation because I fixed reserve() to not require the .ideal
configuration parameter to be set (trunk r14917).
> What we could do is:
> - define a reserveMinSpace() which does not shrink storage
Having two methods called reserveMinSpace() and reserveSpace(), one of
which does not shrink and the other one does, makes no sense to me
because the method names do not reflect that difference at all and
because reserve() is always primarily about "minimum" space anyway.
More importantly, reserveSpace() guarantees single ownership. IMO,
shrinking is essentially a side effect of that guarantee.
I suspect we do not need a "provide single-ownership space, shrinking
the existing single-owned MemBlob if there is one" method, but if you
have some existing use cases for it, please share them. If there are no
such cases, reserveSpace()/reserveCapacity() should be optimized to
avoid unnecessary re-allocation when their MemBlob is already not
shared, but that is a different story, unrelated to JoinContainerIntoSBuf!
> - reimplement [...] reserveSpace() as convenience wrapper around reserve()
Sure, but that is outside this patch scope.
> - while we're at it, give SBufReservationRequirements a convenience
> constructor
With minSpace as the only parameter? Sure. Please do not forget
"explicit". Again, that seems to be outside your patch scope.
I do not recommend providing more than one constructor parameter though
because constructors with multiple same- or similar-type parameters are
a recipe for mismatching parameters disasters.
HTH,
Alex.
Testing allocations in various JoinContainerIntoSBuf() implementations.
This version makes each test case independent from other test cases.
Also added JoinContainerIntoSBuf5() that uses trunk r14917 to provide a
simpler allocation-free implementation.
=== modified file 'src/AccessLogEntry.cc'
--- src/AccessLogEntry.cc 2016-10-28 11:55:44 +0000
+++ src/AccessLogEntry.cc 2016-11-07 00:20:05 +0000
@@ -15,6 +15,85 @@
#if USE_OPENSSL
#include "ssl/support.h"
+static SBuf value1("value1 ");
+static SBuf value2("value2 ");
+
+void JoinContainerIntoSBufPrep()
+{
+ debugs(1,1, value1 << value2);
+}
+
+#define progress(where) debugs(1,2, where)
+
+SBuf JoinContainerIntoSBuf1(SBuf &/*unused; present just to keep APIs the same for testing */)
+{
+ progress("started");
+ SBuf buf;
+ progress("created empty buf");
+ buf.reserveSpace(100);
+ progress("reserved space");
+ buf.append(value1);
+ progress("appended first item");
+ buf.append(value1);
+ progress("appended second item");
+ return buf;
+}
+
+
+SBuf JoinContainerIntoSBuf2(SBuf &buf)
+{
+ progress("started");
+ progress("did not create an empty buf");
+ buf.reserveSpace(100);
+ progress("reserved space");
+ buf.append(value2);
+ progress("appended first item");
+ buf.append(value2);
+ progress("appended second item");
+ return buf;
+}
+
+SBuf &JoinContainerIntoSBuf3(SBuf &buf)
+{
+ progress("started");
+ buf.reserveSpace(100);
+ progress("reserved space");
+ buf.append(value1);
+ progress("appended first item");
+ buf.append(value2);
+ progress("appended second item");
+ return buf;
+}
+
+SBuf &JoinContainerIntoSBuf4(SBuf &buf)
+{
+ progress("started");
+ SBufReservationRequirements spaceRequirements;
+ spaceRequirements.idealSpace = 100;
+ spaceRequirements.minSpace = 100;
+ buf.reserve(spaceRequirements);
+ progress("reserved space");
+ buf.append(value1);
+ progress("appended first item");
+ buf.append(value2);
+ progress("appended second item");
+ return buf;
+}
+
+SBuf &JoinContainerIntoSBuf5(SBuf &buf)
+{
+ progress("started");
+ SBufReservationRequirements spaceRequirements;
+ spaceRequirements.minSpace = 100;
+ buf.reserve(spaceRequirements);
+ progress("reserved space");
+ buf.append(value1);
+ progress("appended first item");
+ buf.append(value2);
+ progress("appended second item");
+ return buf;
+}
+
AccessLogEntry::SslDetails::SslDetails(): user(NULL), bumpMode(::Ssl::bumpEnd)
{
}
=== modified file 'src/main.cc'
--- src/main.cc 2016-10-03 04:33:08 +0000
+++ src/main.cc 2016-11-07 00:16:06 +0000
@@ -1408,6 +1408,31 @@
}
}
+extern void JoinContainerIntoSBufPrep();
+extern SBuf JoinContainerIntoSBuf1(SBuf &);
+extern SBuf JoinContainerIntoSBuf2(SBuf &buf);
+extern SBuf &JoinContainerIntoSBuf3(SBuf &buf);
+extern SBuf &JoinContainerIntoSBuf4(SBuf &buf);
+extern SBuf &JoinContainerIntoSBuf5(SBuf &buf);
+
+template <class Function>
+static
+void
+testJoin(const char *label, Function join)
+{
+ debugs(1,1, "started testing " << label);
+
+ SBuf buffer;
+ buffer.reserveSpace(1024);
+ debugs(1,1, "reserved space for " << label);
+ buffer.append("Foo: ", 5);
+ debugs(1,1, "appended Foo for " << label);
+ const auto &result = join(buffer);
+ // to simplify, let's not append join() result;
+ // only JoinContainerIntoSBuf1() needs that anyway
+ debugs(1,1, "finished testing " << label << " with " << result);
+}
+
int
SquidMain(int argc, char **argv)
{
@@ -1616,6 +1641,17 @@
#endif
+ JoinContainerIntoSBufPrep();
+ debugs(1,1, "test starts");
+ {
+ testJoin("JoinContainerIntoSBuf1", JoinContainerIntoSBuf1);
+ testJoin("JoinContainerIntoSBuf2", JoinContainerIntoSBuf2);
+ testJoin("JoinContainerIntoSBuf3", JoinContainerIntoSBuf3);
+ testJoin("JoinContainerIntoSBuf4", JoinContainerIntoSBuf4);
+ testJoin("JoinContainerIntoSBuf5", JoinContainerIntoSBuf5);
+ }
+ debugs(1,1, "test ends");
+
/* main loop */
EventLoop mainLoop;
2016/11/06 17:20:21.932| test starts
2016/11/06 17:20:21.932| started testing JoinContainerIntoSBuf1
2016/11/06 17:20:21.932| 24,8| SBuf.cc(42) SBuf: SBuf2714 created
2016/11/06 17:20:21.932| 24,8| SBuf.cc(912) cow: SBuf2714 new size:1024
2016/11/06 17:20:21.932| 24,8| SBuf.cc(882) reAlloc: SBuf2714 new size: 1024
2016/11/06 17:20:21.932| 24,9| MemBlob.cc(56) MemBlob: constructed, this=0x265db40 id=blob1499 reserveSize=1024
2016/11/06 17:20:21.932| 24,8| MemBlob.cc(101) memAlloc: blob1499 memAlloc: requested=1024, received=1024
2016/11/06 17:20:21.932| 24,7| SBuf.cc(891) reAlloc: SBuf2714 new store capacity: 1024
2016/11/06 17:20:21.932| reserved space for JoinContainerIntoSBuf1
2016/11/06 17:20:21.932| 24,7| SBuf.cc(206) append: from c-string to id SBuf2714
2016/11/06 17:20:21.932| 24,7| SBuf.cc(154) rawSpace: reserving 5 for SBuf2714
2016/11/06 17:20:21.932| 24,7| SBuf.cc(161) rawSpace: SBuf2714 not growing
2016/11/06 17:20:21.932| appended Foo for JoinContainerIntoSBuf1
2016/11/06 17:20:21.932| 1,2| AccessLogEntry.cc(30) JoinContainerIntoSBuf1: started
2016/11/06 17:20:21.932| 24,8| SBuf.cc(42) SBuf: SBuf2715 created
2016/11/06 17:20:21.932| 1,2| AccessLogEntry.cc(32) JoinContainerIntoSBuf1: created empty buf
2016/11/06 17:20:21.932| 24,8| SBuf.cc(912) cow: SBuf2715 new size:100
2016/11/06 17:20:21.932| 24,8| SBuf.cc(882) reAlloc: SBuf2715 new size: 100
2016/11/06 17:20:21.932| 24,9| MemBlob.cc(56) MemBlob: constructed, this=0x265df90 id=blob1500 reserveSize=100
2016/11/06 17:20:21.932| 24,8| MemBlob.cc(101) memAlloc: blob1500 memAlloc: requested=100, received=128
2016/11/06 17:20:21.932| 24,7| SBuf.cc(891) reAlloc: SBuf2715 new store capacity: 128
2016/11/06 17:20:21.932| 1,2| AccessLogEntry.cc(34) JoinContainerIntoSBuf1: reserved space
2016/11/06 17:20:21.932| 24,7| SBuf.cc(154) rawSpace: reserving 7 for SBuf2715
2016/11/06 17:20:21.932| 24,7| SBuf.cc(161) rawSpace: SBuf2715 not growing
2016/11/06 17:20:21.932| 1,2| AccessLogEntry.cc(36) JoinContainerIntoSBuf1: appended first item
2016/11/06 17:20:21.932| 24,7| SBuf.cc(154) rawSpace: reserving 7 for SBuf2715
2016/11/06 17:20:21.932| 24,7| SBuf.cc(161) rawSpace: SBuf2715 not growing
2016/11/06 17:20:21.932| 1,2| AccessLogEntry.cc(38) JoinContainerIntoSBuf1: appended second item
2016/11/06 17:20:21.932| finished testing JoinContainerIntoSBuf1 with value1 value1
2016/11/06 17:20:21.932| 24,8| SBuf.cc(85) ~SBuf: SBuf2715 destructed
2016/11/06 17:20:21.932| 24,9| MemBlob.cc(82) ~MemBlob: destructed, this=0x265df90 id=blob1500 capacity=128 size=14
2016/11/06 17:20:21.932| 24,8| SBuf.cc(85) ~SBuf: SBuf2714 destructed
2016/11/06 17:20:21.932| 24,9| MemBlob.cc(82) ~MemBlob: destructed, this=0x265db40 id=blob1499 capacity=1024 size=5
2016/11/06 17:20:21.932| started testing JoinContainerIntoSBuf2
2016/11/06 17:20:21.932| 24,8| SBuf.cc(42) SBuf: SBuf2716 created
2016/11/06 17:20:21.932| 24,8| SBuf.cc(912) cow: SBuf2716 new size:1024
2016/11/06 17:20:21.932| 24,8| SBuf.cc(882) reAlloc: SBuf2716 new size: 1024
2016/11/06 17:20:21.932| 24,9| MemBlob.cc(56) MemBlob: constructed, this=0x265db40 id=blob1501 reserveSize=1024
2016/11/06 17:20:21.932| 24,8| MemBlob.cc(101) memAlloc: blob1501 memAlloc: requested=1024, received=1024
2016/11/06 17:20:21.932| 24,7| SBuf.cc(891) reAlloc: SBuf2716 new store capacity: 1024
2016/11/06 17:20:21.932| reserved space for JoinContainerIntoSBuf2
2016/11/06 17:20:21.932| 24,7| SBuf.cc(206) append: from c-string to id SBuf2716
2016/11/06 17:20:21.932| 24,7| SBuf.cc(154) rawSpace: reserving 5 for SBuf2716
2016/11/06 17:20:21.932| 24,7| SBuf.cc(161) rawSpace: SBuf2716 not growing
2016/11/06 17:20:21.932| appended Foo for JoinContainerIntoSBuf2
2016/11/06 17:20:21.932| 1,2| AccessLogEntry.cc(45) JoinContainerIntoSBuf2: started
2016/11/06 17:20:21.932| 1,2| AccessLogEntry.cc(46) JoinContainerIntoSBuf2: did not create an empty buf
2016/11/06 17:20:21.932| 24,8| SBuf.cc(912) cow: SBuf2716 new size:105
2016/11/06 17:20:21.932| 24,8| SBuf.cc(882) reAlloc: SBuf2716 new size: 105
2016/11/06 17:20:21.932| 24,9| MemBlob.cc(56) MemBlob: constructed, this=0x265df90 id=blob1502 reserveSize=105
2016/11/06 17:20:21.932| 24,8| MemBlob.cc(101) memAlloc: blob1502 memAlloc: requested=105, received=128
2016/11/06 17:20:21.932| 24,9| MemBlob.cc(82) ~MemBlob: destructed, this=0x265db40 id=blob1501 capacity=1024 size=5
2016/11/06 17:20:21.932| 24,7| SBuf.cc(891) reAlloc: SBuf2716 new store capacity: 128
2016/11/06 17:20:21.932| 1,2| AccessLogEntry.cc(48) JoinContainerIntoSBuf2: reserved space
2016/11/06 17:20:21.932| 24,7| SBuf.cc(154) rawSpace: reserving 7 for SBuf2716
2016/11/06 17:20:21.932| 24,7| SBuf.cc(161) rawSpace: SBuf2716 not growing
2016/11/06 17:20:21.932| 1,2| AccessLogEntry.cc(50) JoinContainerIntoSBuf2: appended first item
2016/11/06 17:20:21.932| 24,7| SBuf.cc(154) rawSpace: reserving 7 for SBuf2716
2016/11/06 17:20:21.932| 24,7| SBuf.cc(161) rawSpace: SBuf2716 not growing
2016/11/06 17:20:21.932| 1,2| AccessLogEntry.cc(52) JoinContainerIntoSBuf2: appended second item
2016/11/06 17:20:21.932| 24,8| SBuf.cc(50) SBuf: SBuf2717 created from id SBuf2716
2016/11/06 17:20:21.932| finished testing JoinContainerIntoSBuf2 with Foo: value2 value2
2016/11/06 17:20:21.932| 24,8| SBuf.cc(85) ~SBuf: SBuf2717 destructed
2016/11/06 17:20:21.932| 24,8| SBuf.cc(85) ~SBuf: SBuf2716 destructed
2016/11/06 17:20:21.932| 24,9| MemBlob.cc(82) ~MemBlob: destructed, this=0x265df90 id=blob1502 capacity=128 size=19
2016/11/06 17:20:21.932| started testing JoinContainerIntoSBuf3
2016/11/06 17:20:21.932| 24,8| SBuf.cc(42) SBuf: SBuf2718 created
2016/11/06 17:20:21.932| 24,8| SBuf.cc(912) cow: SBuf2718 new size:1024
2016/11/06 17:20:21.932| 24,8| SBuf.cc(882) reAlloc: SBuf2718 new size: 1024
2016/11/06 17:20:21.932| 24,9| MemBlob.cc(56) MemBlob: constructed, this=0x265df90 id=blob1503 reserveSize=1024
2016/11/06 17:20:21.932| 24,8| MemBlob.cc(101) memAlloc: blob1503 memAlloc: requested=1024, received=1024
2016/11/06 17:20:21.932| 24,7| SBuf.cc(891) reAlloc: SBuf2718 new store capacity: 1024
2016/11/06 17:20:21.932| reserved space for JoinContainerIntoSBuf3
2016/11/06 17:20:21.932| 24,7| SBuf.cc(206) append: from c-string to id SBuf2718
2016/11/06 17:20:21.932| 24,7| SBuf.cc(154) rawSpace: reserving 5 for SBuf2718
2016/11/06 17:20:21.932| 24,7| SBuf.cc(161) rawSpace: SBuf2718 not growing
2016/11/06 17:20:21.932| appended Foo for JoinContainerIntoSBuf3
2016/11/06 17:20:21.933| 1,2| AccessLogEntry.cc(58) JoinContainerIntoSBuf3: started
2016/11/06 17:20:21.933| 24,8| SBuf.cc(912) cow: SBuf2718 new size:105
2016/11/06 17:20:21.933| 24,8| SBuf.cc(882) reAlloc: SBuf2718 new size: 105
2016/11/06 17:20:21.933| 24,9| MemBlob.cc(56) MemBlob: constructed, this=0x265dfd0 id=blob1504 reserveSize=105
2016/11/06 17:20:21.933| 24,8| MemBlob.cc(101) memAlloc: blob1504 memAlloc: requested=105, received=128
2016/11/06 17:20:21.933| 24,9| MemBlob.cc(82) ~MemBlob: destructed, this=0x265df90 id=blob1503 capacity=1024 size=5
2016/11/06 17:20:21.933| 24,7| SBuf.cc(891) reAlloc: SBuf2718 new store capacity: 128
2016/11/06 17:20:21.933| 1,2| AccessLogEntry.cc(60) JoinContainerIntoSBuf3: reserved space
2016/11/06 17:20:21.933| 24,7| SBuf.cc(154) rawSpace: reserving 7 for SBuf2718
2016/11/06 17:20:21.933| 24,7| SBuf.cc(161) rawSpace: SBuf2718 not growing
2016/11/06 17:20:21.933| 1,2| AccessLogEntry.cc(62) JoinContainerIntoSBuf3: appended first item
2016/11/06 17:20:21.933| 24,7| SBuf.cc(154) rawSpace: reserving 7 for SBuf2718
2016/11/06 17:20:21.933| 24,7| SBuf.cc(161) rawSpace: SBuf2718 not growing
2016/11/06 17:20:21.933| 1,2| AccessLogEntry.cc(64) JoinContainerIntoSBuf3: appended second item
2016/11/06 17:20:21.933| finished testing JoinContainerIntoSBuf3 with Foo: value1 value2
2016/11/06 17:20:21.933| 24,8| SBuf.cc(85) ~SBuf: SBuf2718 destructed
2016/11/06 17:20:21.933| 24,9| MemBlob.cc(82) ~MemBlob: destructed, this=0x265dfd0 id=blob1504 capacity=128 size=19
2016/11/06 17:20:21.933| started testing JoinContainerIntoSBuf4
2016/11/06 17:20:21.933| 24,8| SBuf.cc(42) SBuf: SBuf2719 created
2016/11/06 17:20:21.933| 24,8| SBuf.cc(912) cow: SBuf2719 new size:1024
2016/11/06 17:20:21.933| 24,8| SBuf.cc(882) reAlloc: SBuf2719 new size: 1024
2016/11/06 17:20:21.933| 24,9| MemBlob.cc(56) MemBlob: constructed, this=0x265dfd0 id=blob1505 reserveSize=1024
2016/11/06 17:20:21.933| 24,8| MemBlob.cc(101) memAlloc: blob1505 memAlloc: requested=1024, received=1024
2016/11/06 17:20:21.933| 24,7| SBuf.cc(891) reAlloc: SBuf2719 new store capacity: 1024
2016/11/06 17:20:21.933| reserved space for JoinContainerIntoSBuf4
2016/11/06 17:20:21.933| 24,7| SBuf.cc(206) append: from c-string to id SBuf2719
2016/11/06 17:20:21.933| 24,7| SBuf.cc(154) rawSpace: reserving 5 for SBuf2719
2016/11/06 17:20:21.933| 24,7| SBuf.cc(161) rawSpace: SBuf2719 not growing
2016/11/06 17:20:21.933| appended Foo for JoinContainerIntoSBuf4
2016/11/06 17:20:21.933| 1,2| AccessLogEntry.cc(70) JoinContainerIntoSBuf4: started
2016/11/06 17:20:21.933| 24,8| SBuf.cc(130) reserve: SBuf2719 was: 0+5+1019=1024
2016/11/06 17:20:21.933| 1,2| AccessLogEntry.cc(75) JoinContainerIntoSBuf4: reserved space
2016/11/06 17:20:21.933| 24,7| SBuf.cc(154) rawSpace: reserving 7 for SBuf2719
2016/11/06 17:20:21.933| 24,7| SBuf.cc(161) rawSpace: SBuf2719 not growing
2016/11/06 17:20:21.933| 1,2| AccessLogEntry.cc(77) JoinContainerIntoSBuf4: appended first item
2016/11/06 17:20:21.933| 24,7| SBuf.cc(154) rawSpace: reserving 7 for SBuf2719
2016/11/06 17:20:21.933| 24,7| SBuf.cc(161) rawSpace: SBuf2719 not growing
2016/11/06 17:20:21.933| 1,2| AccessLogEntry.cc(79) JoinContainerIntoSBuf4: appended second item
2016/11/06 17:20:21.933| finished testing JoinContainerIntoSBuf4 with Foo: value1 value2
2016/11/06 17:20:21.933| 24,8| SBuf.cc(85) ~SBuf: SBuf2719 destructed
2016/11/06 17:20:21.933| 24,9| MemBlob.cc(82) ~MemBlob: destructed, this=0x265dfd0 id=blob1505 capacity=1024 size=19
2016/11/06 17:20:21.933| started testing JoinContainerIntoSBuf5
2016/11/06 17:20:21.933| 24,8| SBuf.cc(42) SBuf: SBuf2720 created
2016/11/06 17:20:21.933| 24,8| SBuf.cc(912) cow: SBuf2720 new size:1024
2016/11/06 17:20:21.933| 24,8| SBuf.cc(882) reAlloc: SBuf2720 new size: 1024
2016/11/06 17:20:21.933| 24,9| MemBlob.cc(56) MemBlob: constructed, this=0x265dfd0 id=blob1506 reserveSize=1024
2016/11/06 17:20:21.933| 24,8| MemBlob.cc(101) memAlloc: blob1506 memAlloc: requested=1024, received=1024
2016/11/06 17:20:21.933| 24,7| SBuf.cc(891) reAlloc: SBuf2720 new store capacity: 1024
2016/11/06 17:20:21.933| reserved space for JoinContainerIntoSBuf5
2016/11/06 17:20:21.933| 24,7| SBuf.cc(206) append: from c-string to id SBuf2720
2016/11/06 17:20:21.933| 24,7| SBuf.cc(154) rawSpace: reserving 5 for SBuf2720
2016/11/06 17:20:21.933| 24,7| SBuf.cc(161) rawSpace: SBuf2720 not growing
2016/11/06 17:20:21.933| appended Foo for JoinContainerIntoSBuf5
2016/11/06 17:20:21.933| 1,2| AccessLogEntry.cc(85) JoinContainerIntoSBuf5: started
2016/11/06 17:20:21.933| 24,8| SBuf.cc(130) reserve: SBuf2720 was: 0+5+1019=1024
2016/11/06 17:20:21.933| 1,2| AccessLogEntry.cc(89) JoinContainerIntoSBuf5: reserved space
2016/11/06 17:20:21.933| 24,7| SBuf.cc(154) rawSpace: reserving 7 for SBuf2720
2016/11/06 17:20:21.933| 24,7| SBuf.cc(161) rawSpace: SBuf2720 not growing
2016/11/06 17:20:21.933| 1,2| AccessLogEntry.cc(91) JoinContainerIntoSBuf5: appended first item
2016/11/06 17:20:21.933| 24,7| SBuf.cc(154) rawSpace: reserving 7 for SBuf2720
2016/11/06 17:20:21.933| 24,7| SBuf.cc(161) rawSpace: SBuf2720 not growing
2016/11/06 17:20:21.933| 1,2| AccessLogEntry.cc(93) JoinContainerIntoSBuf5: appended second item
2016/11/06 17:20:21.933| finished testing JoinContainerIntoSBuf5 with Foo: value1 value2
2016/11/06 17:20:21.933| 24,8| SBuf.cc(85) ~SBuf: SBuf2720 destructed
2016/11/06 17:20:21.933| 24,9| MemBlob.cc(82) ~MemBlob: destructed, this=0x265dfd0 id=blob1506 capacity=1024 size=19
2016/11/06 17:20:21.933| test ends
_______________________________________________
squid-dev mailing list
[email protected]
http://lists.squid-cache.org/listinfo/squid-dev