x86: Fix memory leak in table walker
authorAndreas Hansson <andreas.hansson@arm.com>
Fri, 24 Jan 2014 21:29:29 +0000 (15:29 -0600)
committerAndreas Hansson <andreas.hansson@arm.com>
Fri, 24 Jan 2014 21:29:29 +0000 (15:29 -0600)
This patch fixes a memory leak in the table walker, by ensuring that
the sender state is deleted again if the request packet cannot be
successfully sent.

src/arch/x86/pagetable_walker.cc

index 45f902999a2faa0d39b58b018ef75e09a2a310e8..63397a607a0d70bc69ac685541964fdc07f89df7 100644 (file)
@@ -165,8 +165,18 @@ Walker::recvRetry()
 
 bool Walker::sendTiming(WalkerState* sendingState, PacketPtr pkt)
 {
-    pkt->pushSenderState(new WalkerSenderState(sendingState));
-    return port.sendTimingReq(pkt);
+    WalkerSenderState* walker_state = new WalkerSenderState(sendingState);
+    pkt->pushSenderState(walker_state);
+    if (port.sendTimingReq(pkt)) {
+        return true;
+    } else {
+        // undo the adding of the sender state and delete it, as we
+        // will do it again the next time we attempt to send it
+        pkt->popSenderState();
+        delete walker_state;
+        return false;
+    }
+
 }
 
 BaseMasterPort &