MessagePort: implement the virtual recvTiming function to avoid double pkt delete
Double packet delete problem is due to an interrupt device deleting a packet that the SimpleTimingPort also deletes. Since MessagePort descends from SimpleTimingPort, simply reimplement the failing code from SimpleTimingPort: recvTiming.
This commit is contained in:
parent
02b05bf9be
commit
d9f0a8288e
3 changed files with 6 additions and 6 deletions
|
@ -340,8 +340,6 @@ X86ISA::Interrupts::recvResponse(PacketPtr pkt)
|
|||
low.deliveryStatus = 0;
|
||||
regs[APIC_INTERRUPT_COMMAND_LOW] = low;
|
||||
}
|
||||
delete pkt->req;
|
||||
delete pkt;
|
||||
DPRINTF(LocalApic, "ICR is now idle.\n");
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -37,10 +37,14 @@ X86ISA::IntDev::IntPort::sendMessage(ApicList apics,
|
|||
ApicList::iterator apicIt;
|
||||
for (apicIt = apics.begin(); apicIt != apics.end(); apicIt++) {
|
||||
PacketPtr pkt = buildIntRequest(*apicIt, message);
|
||||
if (timing)
|
||||
if (timing) {
|
||||
sendMessageTiming(pkt, latency);
|
||||
else
|
||||
// The target handles cleaning up the packet in timing mode.
|
||||
} else {
|
||||
sendMessageAtomic(pkt);
|
||||
delete pkt->req;
|
||||
delete pkt;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -138,8 +138,6 @@ class IntDev
|
|||
virtual Tick
|
||||
recvResponse(PacketPtr pkt)
|
||||
{
|
||||
delete pkt->req;
|
||||
delete pkt;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue