Method AgentSocketClient::receiveResponseFromServer should hang
until it can return a request received from cynara service.
However a single read from socket can read more than one request.
Received requests are queued.
Code did not check if there is a valid request read and queued
previously, but always tried to read from socket.
Fix changes order - so now code first checks queue and only in case,
when there is no valid request waiting a socket is read.
Change-Id: I845cd677700e516f252a8958b97ee8facb82170f
}
ResponsePtr AgentSocketClient::receiveResponseFromServer(void) {
- while (true) {
+ ResponsePtr response;
+ while (!(response = m_protocol->extractResponseFromBuffer(m_readQueue))) {
if (!m_socket.receiveFromServer(*m_readQueue)) {
LOGW("Error receiving data from Cynara. Service not available.");
return nullptr;
}
-
- ResponsePtr response = m_protocol->extractResponseFromBuffer(m_readQueue);
- if (response) {
- return response;
- }
}
+ return response;
}
bool AgentSocketClient::sendDataToServer(BinaryQueue &data) {