Text archives Help
- From: abe@sci.utah.edu
- To: manta@sci.utah.edu
- Subject: [MANTA] r1528 - trunk/Engine/Control
- Date: Sat, 21 Jul 2007 17:01:17 -0600 (MDT)
Author: abe
Date: Sat Jul 21 17:01:17 2007
New Revision: 1528
Modified:
trunk/Engine/Control/RTRT.cc
Log:
Fixed race condition during thread creation where rendering threads
where created before their random number generator instances. Now all
RNG's are created before any threads are constructed.
M RTRT.cc
Modified: trunk/Engine/Control/RTRT.cc
==============================================================================
--- trunk/Engine/Control/RTRT.cc (original)
+++ trunk/Engine/Control/RTRT.cc Sat Jul 21 17:01:17 2007
@@ -446,21 +446,29 @@
workers.resize(workersWanted);
rngs.resize(workersWanted);
changedFlags.resize(workersWanted);
+
+ // Initialize random number generators.
+ if (create_rng) {
+ for (int i=0;i<workersWanted;++i) {
+ create_rng->call(rngs[i]);
+ }
+ }
+
+ // Startup rendering threads.
for(int i=0;i<workersWanted;i++){
if(i>0 || !blockUntilFinished){
ostringstream name;
name << "RTRT Worker " << i;
- Thread* t = new Thread(new Worker(this, i, false), name.str().c_str(),
- 0, Thread::NotActivated);
+ Thread* t = workers[i] =
+ new Thread(new Worker(this, i, false), name.str().c_str(),
+ 0, Thread::NotActivated);
t->setStackSize(RENDER_THREAD_STACKSIZE);
t->activate(false);
- workers[i] = t;
}
- if (create_rng) {
- create_rng->call(rngs[i]);
- }
}
+ // All rendering threads active.
+
// Block until finished is set while running in bin/manta
if(blockUntilFinished)
internalRenderLoop(0, false);
@@ -576,9 +584,17 @@
name << "RTRT Worker " << i;
workers[i] = new Thread(new Worker(this, i, true),
name.str().c_str(),
0, Thread::NotActivated);
+
+ // Set the stack size.
workers[i]->setStackSize(RENDER_THREAD_STACKSIZE);
+
+ // Create a random number generator.
+ if (create_rng) {
+ create_rng->call(rngs[i]);
+ }
+
+ // Active the thread.
workers[i]->activate(false);
- if (create_rng) create_rng->call(rngs[i]);
}
} else if(newWorkers < workersRendering) {
workersChanged = true;
- [MANTA] r1528 - trunk/Engine/Control, abe, 07/21/2007
Archive powered by MHonArc 2.6.16.