Fix recv logic

This commit is contained in:
Dennis Klein 2019-03-20 17:16:06 +01:00 committed by Dennis Klein
parent 90fdcc26bb
commit cc8fd73025

View File

@ -329,7 +329,6 @@ auto Socket::SendQueueReader() -> void
fMessagesTx++; fMessagesTx++;
fSendPushSem.signal(); fSendPushSem.signal();
}); });
} else { } else {
fDataEndpoint->send( fDataEndpoint->send(
buffer, [&, size, msg2 = std::move(msg)](boost::asio::mutable_buffer) mutable { buffer, [&, size, msg2 = std::move(msg)](boost::asio::mutable_buffer) mutable {
@ -477,23 +476,26 @@ auto Socket::DataMessageReceived(MessagePtr msg) -> void
{ {
if (fMultiPartRecvCounter > 0) { if (fMultiPartRecvCounter > 0) {
--fMultiPartRecvCounter; --fMultiPartRecvCounter;
fInflightMultiPartMessage.emplace_back(std::move(msg)); fInflightMultiPartMessage.push_back(std::move(msg));
} }
std::unique_lock<std::mutex> lk(fRecvQueueMutex);
if (fMultiPartRecvCounter == 0) { if (fMultiPartRecvCounter == 0) {
std::unique_lock<std::mutex> lk(fRecvQueueMutex);
fRecvQueue.push(std::move(fInflightMultiPartMessage)); fRecvQueue.push(std::move(fInflightMultiPartMessage));
lk.unlock();
fMultiPartRecvCounter = -1; fMultiPartRecvCounter = -1;
} else { fRecvPopSem.signal();
} else if (fMultiPartRecvCounter == -1) {
std::vector<MessagePtr> msgVec; std::vector<MessagePtr> msgVec;
msgVec.push_back(std::move(msg)); msgVec.push_back(std::move(msg));
std::unique_lock<std::mutex> lk(fRecvQueueMutex);
fRecvQueue.push(std::move(msgVec)); fRecvQueue.push(std::move(msgVec));
}
lk.unlock(); lk.unlock();
fRecvPopSem.signal(); fRecvPopSem.signal();
} }
}
auto Socket::Close() -> void {} auto Socket::Close() -> void {}
auto Socket::SetOption(const string& /*option*/, const void* /*value*/, size_t /*valueSize*/) -> void auto Socket::SetOption(const string& /*option*/, const void* /*value*/, size_t /*valueSize*/) -> void