Make packet boundary assertion less costly

mxs::Buffer::iterator is not a random-access iterator and hence will have
linear cost. This is too costly to do on every packet with even moderately
sized resultsets.
This commit is contained in:
Markus Mäkelä 2019-06-26 08:30:17 +03:00
parent d8cbdae83d
commit 88dae197b0
No known key found for this signature in database
GPG Key ID: 72D48FCE664F7B19

View File

@ -284,6 +284,8 @@ void RWBackend::process_packets(GWBUF* result)
{
mxs::Buffer buffer(result);
auto it = buffer.begin();
MXB_AT_DEBUG(size_t total_len = buffer.length());
MXB_AT_DEBUG(size_t used_len = 0);
while (it != buffer.end())
{
@ -293,7 +295,8 @@ void RWBackend::process_packets(GWBUF* result)
len |= (*it++) << 16;
++it; // Skip the sequence
mxb_assert(it != buffer.end());
mxb_assert(std::distance(it, buffer.end()) >= len);
mxb_assert(used_len + len < total_len);
MXB_AT_DEBUG(used_len += len);
auto end = it;
end.advance(len);
uint8_t cmd = *it;