[Avida-SVN] r2859 - development/source/cpu

brysonda at myxo.css.msu.edu brysonda at myxo.css.msu.edu
Tue Oct 21 10:14:25 PDT 2008


Author: brysonda
Date: 2008-10-21 13:14:25 -0400 (Tue, 21 Oct 2008)
New Revision: 2859

Modified:
   development/source/cpu/cHardwareManager.cc
   development/source/cpu/cHardwareManager.h
Log:
Fix (thread) unsafe usage of static function variable and  iostream functions in cHardwareManager with a member variable and a cStringUtil function call.

Modified: development/source/cpu/cHardwareManager.cc
===================================================================
--- development/source/cpu/cHardwareManager.cc	2008-10-21 15:23:07 UTC (rev 2858)
+++ development/source/cpu/cHardwareManager.cc	2008-10-21 17:14:25 UTC (rev 2859)
@@ -24,6 +24,8 @@
 
 #include "cHardwareManager.h"
 
+#include "cDriverManager.h"
+#include "cDriverStatusConduit.h"
 #include "cHardwareCPU.h"
 #include "cHardwareExperimental.h"
 #include "cHardwareSMT.h"
@@ -32,13 +34,12 @@
 #include "cHardwareStatusPrinter.h"
 #include "cInitFile.h"
 #include "cInstSet.h"
+#include "cStringUtil.h"
 #include "cWorld.h"
-#include "cDriverManager.h"
-#include "cDriverStatusConduit.h"
 #include "tDictionary.h"
 
 cHardwareManager::cHardwareManager(cWorld* world)
-: m_world(world), m_type(world->GetConfig().HARDWARE_TYPE.Get()) /*, m_testres(world) */
+: m_world(world), m_type(world->GetConfig().HARDWARE_TYPE.Get()), m_cpu_count(0)
 {
   cString filename = world->GetConfig().INST_SET.Get();
 
@@ -84,10 +85,9 @@
 
 cHardwareBase* cHardwareManager::Create(cOrganism* in_org, cInstSet* inst_set)
 {
-  static unsigned int cpu=0;
   assert(in_org != NULL);
 	
-  cHardwareBase* hw=0;
+  cHardwareBase* hw = 0;
 	
   switch (m_type) {
     case HARDWARE_TYPE_CPU_ORIGINAL:
@@ -111,10 +111,9 @@
   }
   
   // Are we tracing the execution of this cpu?
-  if(m_world->GetConfig().TRACE_EXECUTION.Get()) {
-    std::ostringstream filename;
-    filename << "trace-" << cpu++ << ".trace";    
-    hw->SetTrace(new cHardwareStatusPrinter(m_world->GetDataFileOFStream(filename.str().c_str())));
+  if (m_world->GetConfig().TRACE_EXECUTION.Get()) {
+    cString filename =  cStringUtil::Stringf("trace-%d.trace", m_cpu_count++);
+    hw->SetTrace(new cHardwareStatusPrinter(m_world->GetDataFileOFStream(filename)));
   }
   
   assert(hw != 0);

Modified: development/source/cpu/cHardwareManager.h
===================================================================
--- development/source/cpu/cHardwareManager.h	2008-10-21 15:23:07 UTC (rev 2858)
+++ development/source/cpu/cHardwareManager.h	2008-10-21 17:14:25 UTC (rev 2859)
@@ -50,7 +50,7 @@
   cWorld* m_world;
   cInstSet* m_inst_set;
   int m_type;
-//  cTestResources m_testres;
+  int m_cpu_count;
   
   cHardwareManager(); // @not_implemented
   cHardwareManager(const cHardwareManager&); // @not_implemented




More information about the Avida-cvs mailing list