invalidate cached data of messages with same name and class (ignoring level) after writing a message or updating one

This commit is contained in:
john30
2015-09-19 09:52:08 +02:00
parent f34265b818
commit 5c079e50c2
+16 -3
View File
@@ -154,9 +154,15 @@ result_t BusHandler::sendAndWait(SymbolString& master, SymbolString& slave)
bool success = m_finishedRequests.waitRemove(&request);
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;
}
if (!success || result == RESULT_ERR_NO_SIGNAL || result == RESULT_ERR_SEND || result == RESULT_ERR_DEVICE) {
logError(lf_bus, "%s, give up", getResultCode(result));
break;
@@ -737,7 +743,8 @@ void BusHandler::receiveCompleted()
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 (dstAddress == BROADCAST)
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());
else
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();
}
}
}