[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