diff -r 030d32bfa29a -r e3b7c2d371d8 src/mem/cache/cache_impl.hh --- a/src/mem/cache/cache_impl.hh Sat Jul 10 02:20:17 2010 +0100 +++ b/src/mem/cache/cache_impl.hh Sat Jul 10 02:21:10 2010 +0100 @@ -1575,7 +1575,7 @@ schedule(sendEvent, std::max(nextReady, curTick + 1)); } else { // no more to send right now: if we're draining, we may be done - if (drainEvent) { + if (drainEvent && !sendEvent->scheduled()) { drainEvent->process(); drainEvent = NULL; } diff -r 030d32bfa29a -r e3b7c2d371d8 src/mem/tport.cc --- a/src/mem/tport.cc Sat Jul 10 02:20:17 2010 +0100 +++ b/src/mem/tport.cc Sat Jul 10 02:21:10 2010 +0100 @@ -155,7 +155,7 @@ schedule(sendEvent, time <= curTick ? curTick+1 : time); } - if (transmitList.empty() && drainEvent) { + if (transmitList.empty() && drainEvent && !sendEvent->scheduled()) { drainEvent->process(); drainEvent = NULL; } @@ -195,7 +195,7 @@ unsigned int SimpleTimingPort::drain(Event *de) { - if (transmitList.size() == 0) + if (transmitList.size() == 0 && !sendEvent->scheduled()) return 0; drainEvent = de; return 1;