invalidate cached data of messages with same name and class (ignoring level) after writing a message or updating one
This commit is contained in:
@@ -154,9 +154,15 @@ result_t BusHandler::sendAndWait(SymbolString& master, SymbolString& slave)
|
|||||||
bool success = m_finishedRequests.waitRemove(&request);
|
bool success = m_finishedRequests.waitRemove(&request);
|
||||||
result = success ? request.m_result : RESULT_ERR_TIMEOUT;
|
result = success ? request.m_result : RESULT_ERR_TIMEOUT;
|
||||||
|
|
||||||
if (result == RESULT_OK)
|
if (result == RESULT_OK) {
|
||||||
|
deque<Message*> messages = m_messages->findAll(master);
|
||||||
|
while (messages.size()>0) {
|
||||||
|
Message* message = messages.front();
|
||||||
|
m_messages->invalidateCache(message);
|
||||||
|
messages.pop_front();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
if (!success || result == RESULT_ERR_NO_SIGNAL || result == RESULT_ERR_SEND || result == RESULT_ERR_DEVICE) {
|
if (!success || result == RESULT_ERR_NO_SIGNAL || result == RESULT_ERR_SEND || result == RESULT_ERR_DEVICE) {
|
||||||
logError(lf_bus, "%s, give up", getResultCode(result));
|
logError(lf_bus, "%s, give up", getResultCode(result));
|
||||||
break;
|
break;
|
||||||
@@ -737,7 +743,8 @@ void BusHandler::receiveCompleted()
|
|||||||
m_seenAddresses[dstAddress] = true;
|
m_seenAddresses[dstAddress] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Message* message = m_messages->find(m_command);
|
deque<Message*> messages = m_messages->findAll(m_command);
|
||||||
|
Message* message = messages.size()>0 ? messages.front() : NULL;
|
||||||
if (message == NULL) {
|
if (message == NULL) {
|
||||||
if (dstAddress == BROADCAST)
|
if (dstAddress == BROADCAST)
|
||||||
logNotice(lf_update, "unknown BC cmd: %s", m_command.getDataStr().c_str());
|
logNotice(lf_update, "unknown BC cmd: %s", m_command.getDataStr().c_str());
|
||||||
@@ -778,6 +785,12 @@ void BusHandler::receiveCompleted()
|
|||||||
logNotice(lf_update, "update %s %s QQ=%2.2x: %s", circuit.c_str(), name.c_str(), srcAddress, data.c_str());
|
logNotice(lf_update, "update %s %s QQ=%2.2x: %s", circuit.c_str(), name.c_str(), srcAddress, data.c_str());
|
||||||
else
|
else
|
||||||
logNotice(lf_update, "update %s %s: %s", circuit.c_str(), name.c_str(), data.c_str());
|
logNotice(lf_update, "update %s %s: %s", circuit.c_str(), name.c_str(), data.c_str());
|
||||||
|
messages.pop_front();
|
||||||
|
}
|
||||||
|
while (messages.size()>0) {
|
||||||
|
message = messages.front();
|
||||||
|
m_messages->invalidateCache(message);
|
||||||
|
messages.pop_front();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user