ruby: fixes to support more types of RubyRequests
[gem5.git] / src / mem / tport.cc
index f937eeb32bdaf230f2cd96a26a164946342ee4f3..61f9e143ccc8e2b06f748d98537b899854641eed 100644 (file)
@@ -95,7 +95,7 @@ SimpleTimingPort::recvTiming(PacketPtr pkt)
         // recvAtomic() should already have turned packet into
         // atomic response
         assert(pkt->isResponse());
-        schedSendTiming(pkt, curTick + latency);
+        schedSendTiming(pkt, curTick() + latency);
     } else {
         delete pkt;
     }
@@ -107,8 +107,8 @@ SimpleTimingPort::recvTiming(PacketPtr pkt)
 void
 SimpleTimingPort::schedSendTiming(PacketPtr pkt, Tick when)
 {
-    assert(when > curTick);
-    assert(when < curTick + Clock::Int::ms);
+    assert(when > curTick());
+    assert(when < curTick() + SimClock::Int::ms);
 
     // Nothing is on the list: add it and schedule an event
     if (transmitList.empty() || when < transmitList.front().tick) {
@@ -152,10 +152,10 @@ SimpleTimingPort::sendDeferredPacket()
     if (success) {
         if (!transmitList.empty() && !sendEvent->scheduled()) {
             Tick time = transmitList.front().tick;
-            schedule(sendEvent, time <= curTick ? curTick+1 : time);
+            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 @@ SimpleTimingPort::processSendEvent()
 unsigned int
 SimpleTimingPort::drain(Event *de)
 {
-    if (transmitList.size() == 0)
+    if (transmitList.size() == 0 && !sendEvent->scheduled())
         return 0;
     drainEvent = de;
     return 1;