TimingSimpleCPU: split data sender state fix

In sendSplitData, keep a pointer to the senderState that may be updated after
the call to handle*Packet. This way, if the receiver updates the packet
senderState, it can still be accessed in sendSplitData.
This commit is contained in:
Joel Hestness 2011-02-06 22:14:18 -08:00
parent 2da54d1285
commit 52b6119228

View file

@ -325,26 +325,26 @@ TimingSimpleCPU::sendSplitData(RequestPtr req1, RequestPtr req2,
pkt1->makeResponse(); pkt1->makeResponse();
completeDataAccess(pkt1); completeDataAccess(pkt1);
} else if (read) { } else if (read) {
SplitFragmentSenderState * send_state =
dynamic_cast<SplitFragmentSenderState *>(pkt1->senderState);
if (handleReadPacket(pkt1)) { if (handleReadPacket(pkt1)) {
SplitFragmentSenderState * send_state =
dynamic_cast<SplitFragmentSenderState *>(pkt1->senderState);
send_state->clearFromParent(); send_state->clearFromParent();
send_state = dynamic_cast<SplitFragmentSenderState *>(
pkt2->senderState);
if (handleReadPacket(pkt2)) { if (handleReadPacket(pkt2)) {
send_state = dynamic_cast<SplitFragmentSenderState *>(
pkt1->senderState);
send_state->clearFromParent(); send_state->clearFromParent();
} }
} }
} else { } else {
dcache_pkt = pkt1; dcache_pkt = pkt1;
SplitFragmentSenderState * send_state =
dynamic_cast<SplitFragmentSenderState *>(pkt1->senderState);
if (handleWritePacket()) { if (handleWritePacket()) {
SplitFragmentSenderState * send_state =
dynamic_cast<SplitFragmentSenderState *>(pkt1->senderState);
send_state->clearFromParent(); send_state->clearFromParent();
dcache_pkt = pkt2; dcache_pkt = pkt2;
send_state = dynamic_cast<SplitFragmentSenderState *>(
pkt2->senderState);
if (handleWritePacket()) { if (handleWritePacket()) {
send_state = dynamic_cast<SplitFragmentSenderState *>(
pkt1->senderState);
send_state->clearFromParent(); send_state->clearFromParent();
} }
} }