Make the bus work if the other sides recvRetry doesn't call sendTiming for some reason.

--HG--
extra : convert_revision : e722ddb0354a5c021dc7c44a3e2f0a64e962442b
This commit is contained in:
Gabe Black 2006-10-11 00:26:21 -04:00
parent c9102b08fa
commit a139e4394d

View file

@ -214,9 +214,24 @@ Bus::recvRetry(int id)
retryList.front()->sendRetry();
// If inRetry is still true, sendTiming wasn't called
if (inRetry)
panic("Port %s didn't call sendTiming in it's recvRetry\n",\
retryList.front()->getPeer()->name());
//assert(!inRetry);
{
retryList.front()->onRetryList(false);
retryList.pop_front();
inRetry = false;
//Bring tickNextIdle up to the present
while (tickNextIdle < curTick)
tickNextIdle += clock;
//Burn a cycle for the missed grant.
tickNextIdle += clock;
if (!busIdle.scheduled()) {
busIdle.schedule(tickNextIdle);
} else {
busIdle.reschedule(tickNextIdle);
}
}
}
}