BaseCache::CachePort::recvRetry()
{
Packet *pkt;
+ if (!drainList.empty()) {
+ //We have some responses to drain first
+ bool result = true;
+ while (result && !drainList.empty()) {
+ result = sendTiming(drainList.front());
+ if (result)
+ drainList.pop_front();
+ }
+ }
if (!isCpuSide)
{
//Know the packet to send
pkt->result = Packet::Success;
pkt->makeTimingResponse();
- assert(cachePort->sendTiming(pkt));
+ if (!cachePort->sendTiming(pkt)) {
+ //It failed, save it to list of drain events
+ cachePort->drainList.push_back(pkt);
+ }
}
const char *