inorder: object cleanup in destructors
authorKorey Sewell <ksewell@umich.edu>
Sun, 31 Jan 2010 23:30:08 +0000 (18:30 -0500)
committerKorey Sewell <ksewell@umich.edu>
Sun, 31 Jan 2010 23:30:08 +0000 (18:30 -0500)
src/cpu/inorder/cpu.cc
src/cpu/inorder/cpu.hh
src/cpu/inorder/resource.cc
src/cpu/inorder/resource_pool.cc
src/cpu/inorder/resource_pool.hh
src/cpu/inorder/resources/cache_unit.hh
src/cpu/inorder/resources/execution_unit.hh
src/cpu/inorder/resources/fetch_seq_unit.cc
src/cpu/inorder/resources/fetch_seq_unit.hh
src/cpu/inorder/resources/mult_div_unit.hh

index 4723173622dbc6ac9a105981a445c4014aa8c60c..a3b203559f055d028b5e28315c63d4a09f501d03 100644 (file)
@@ -347,6 +347,11 @@ InOrderCPU::InOrderCPU(Params *params)
     scheduleTickEvent(0);
 }
 
+InOrderCPU::~InOrderCPU()
+{
+    delete resPool;
+}
+
 
 void
 InOrderCPU::regStats()
index dc0164d8fbf36d46b0c079c78e08fb36a7eb5832..d8424397b7e6da00501c36ddfdb2396e69b57ad8 100644 (file)
@@ -93,7 +93,9 @@ class InOrderCPU : public BaseCPU
   public:
     /** Constructs a CPU with the given parameters. */
     InOrderCPU(Params *params);
-
+    /* Destructor */
+    ~InOrderCPU();
+    
     /** CPU ID */
     int cpu_id;
 
index 1fd28c939250875ede238a749f374a22b4f2fc8f..e5fd4f70e535e9e7a2419f822d39b38c70df0afb 100644 (file)
@@ -47,6 +47,7 @@ Resource::Resource(string res_name, int res_id, int res_width,
 Resource::~Resource()
 {
     delete [] resourceEvent;
+    delete deniedReq;    
 }
 
 
index dd51242a3eacd60d209ac8634c52c6b83a2cfc48..1f15a2c9679b24ae01dab5e6c23453c05157c6b5 100644 (file)
@@ -91,6 +91,18 @@ ResourcePool::ResourcePool(InOrderCPU *_cpu, ThePipeline::Params *params)
                                        0, _cpu, params));
 }
 
+ResourcePool::~ResourcePool()
+{
+    cout << "Deleting resources ..." << endl;
+    
+    for (int i=0; i < resources.size(); i++) {
+        DPRINTF(Resource, "Deleting resource: %s.\n", resources[i]->name());
+        
+        delete resources[i];
+    }    
+}
+
+
 void
 ResourcePool::init()
 {
index f61fae4c82cb7eb1fed9e099a22ea22ce3b5f81f..ce7167b87b0ea1ee5c36962c45dcc6caf13a25eb 100644 (file)
@@ -122,7 +122,7 @@ class ResourcePool {
 
   public:
     ResourcePool(InOrderCPU *_cpu, ThePipeline::Params *params);
-    virtual ~ResourcePool() {}
+    ~ResourcePool();    
 
     std::string name();
 
index 4162102c7c63895bbc1799a69e89b5f7b1834055..50cb475196abde7bca3dfe8357740dc2463e4cdd 100644 (file)
@@ -62,7 +62,6 @@ class CacheUnit : public Resource
   public:
     CacheUnit(std::string res_name, int res_id, int res_width,
               int res_latency, InOrderCPU *_cpu, ThePipeline::Params *params);
-    virtual ~CacheUnit() {}
 
     enum Command {
         InitiateFetch,
index 37651e873179a2acbc19b9508cadc7f7fa5cb9c1..b9cf1d4281c081c39a2634026e93a1425fc56fb2 100644 (file)
@@ -52,7 +52,6 @@ class ExecutionUnit : public Resource {
   public:
     ExecutionUnit(std::string res_name, int res_id, int res_width,
               int res_latency, InOrderCPU *_cpu, ThePipeline::Params *params);
-    virtual ~ExecutionUnit() {}
 
   public:
     virtual void regStats();
index ba86a91f0f99a0d30868071dba659ef971984be2..03663881c1a3f8bd182db9f34e750995b6ac0326 100644 (file)
@@ -54,6 +54,11 @@ FetchSeqUnit::FetchSeqUnit(std::string res_name, int res_id, int res_width,
     }
 }
 
+FetchSeqUnit::~FetchSeqUnit()
+{
+    delete [] resourceEvent;
+}
+
 void
 FetchSeqUnit::init()
 {
index 3283e0330a82bb81c39611465c52dc15c362426f..289e150aa166d3c5c87a8b5d17d5d1e435d049e0 100644 (file)
@@ -54,8 +54,8 @@ class FetchSeqUnit : public Resource {
   public:
     FetchSeqUnit(std::string res_name, int res_id, int res_width,
               int res_latency, InOrderCPU *_cpu, ThePipeline::Params *params);
-    virtual ~FetchSeqUnit() {}
-
+    virtual ~FetchSeqUnit();
+    
     virtual void init();
     virtual void activateThread(ThreadID tid);
     virtual void deactivateThread(ThreadID tid);
index d3dd0260d434a2f25a4f7681f71ae4b7368666c4..19688b09fd46403708cf6f6400a3574908c29838 100644 (file)
@@ -57,7 +57,6 @@ class MultDivUnit : public Resource {
   public:
     MultDivUnit(std::string res_name, int res_id, int res_width,
               int res_latency, InOrderCPU *_cpu, ThePipeline::Params *params);
-    virtual ~MultDivUnit() {}
 
   public:
     /** Override default Resource getSlot(). Will only getSlot if