}
MessageBuffer &operator=(MessageBuffer&& other) {
- this->~MessageBuffer();
- return *new (this) MessageBuffer(std::move(other));
+ if (m_buffer) {
+ free(m_buffer);
+ }
+ m_buffer = other.m_buffer;
+ m_offset = other.m_offset;
+ m_bufferSize = other.m_bufferSize;
+ other.m_buffer = nullptr;
+ return *this;
}
~MessageBuffer() {
assert(m_offset >= sizeof(size_t));
assert(m_offset <= m_bufferSize);
+ if (num == 0)
+ return;
+
const auto newOffset = m_offset + num;
if (newOffset > m_bufferSize)
ReserveMessageSize(newOffset);
+ assert(bytes);
memcpy(&m_buffer[m_offset], bytes, num);
m_offset = newOffset;
}
if (!newBuffer)
throw std::bad_alloc();
+ if (m_buffer) {
+ free(m_buffer);
+ }
m_buffer = newBuffer;
m_bufferSize = newBufferSize;
}
int len = strlen(str);
if (checkBlank && (0 == len))
ThrowMsg(ClientException::InvalidParameter, "Invalid blank string: " << name);
- if (' ' == str[0] || ' ' == str[len - 1])
+ if (len != 0 && (' ' == str[0] || ' ' == str[len - 1]))
LogWarning("Leading/tailing whitespaces on " << name << ": \"" << str << "\"");
}
case MessageBuffer::InputResult::Done:
buffer.ModeStreaming();
FD_CLR(sock, &m_readSet); // the one and only call on this socket is complete
- const auto event = new Event{ ConnectionID{sock, desc.counter}, std::move(buffer) };
- m_service->ProcessEvent(std::move(*event));
+ auto event = Event{ ConnectionID{sock, desc.counter}, std::move(buffer) };
+ m_service->ProcessEvent(std::move(event));
break;
}
}