[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20564] trunk/blender/source/gameengine: BGE: memory leak in Random actuator + make actuator truly random when seed =0 in the UI.
Benoit Bolsee
benoit.bolsee at online.be
Mon Jun 1 20:41:58 CEST 2009
Revision: 20564
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20564
Author: ben2610
Date: 2009-06-01 20:41:58 +0200 (Mon, 01 Jun 2009)
Log Message:
-----------
BGE: memory leak in Random actuator + make actuator truly random when seed=0 in the UI. When running the game, seed 0 is replaced by a random seed accessible through Python in seed attribute of the actuator. Other seed value will be left unchanged and will generate fixed pseudo random series.
Modified Paths:
--------------
trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp
trunk/blender/source/gameengine/GameLogic/SCA_RandomActuator.cpp
trunk/blender/source/gameengine/GameLogic/SCA_RandomActuator.h
Modified: trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp 2009-06-01 17:23:35 UTC (rev 20563)
+++ trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp 2009-06-01 18:41:58 UTC (rev 20564)
@@ -954,6 +954,11 @@
= (bRandomActuator *) bact->data;
unsigned long seedArg = randAct->seed;
+ if (seedArg == 0)
+ {
+ seedArg = (int)(ketsjiEngine->GetRealTime()*100000.0);
+ seedArg ^= (intptr_t)randAct;
+ }
SCA_RandomActuator::KX_RANDOMACT_MODE modeArg
= SCA_RandomActuator::KX_RANDOMACT_NODEF;
SCA_RandomActuator *tmprandomact;
Modified: trunk/blender/source/gameengine/GameLogic/SCA_RandomActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_RandomActuator.cpp 2009-06-01 17:23:35 UTC (rev 20563)
+++ trunk/blender/source/gameengine/GameLogic/SCA_RandomActuator.cpp 2009-06-01 18:41:58 UTC (rev 20564)
@@ -58,7 +58,6 @@
m_parameter2(para2),
m_distribution(mode)
{
- // m_base is never deleted, probably a memory leak!
m_base = new SCA_RandomNumberGenerator(seed);
m_counter = 0;
enforceConstraints();
@@ -68,7 +67,7 @@
SCA_RandomActuator::~SCA_RandomActuator()
{
- /* intentionally empty */
+ m_base->Release();
}
@@ -81,8 +80,15 @@
return replica;
}
+void SCA_RandomActuator::ProcessReplica()
+{
+ SCA_IActuator::ProcessReplica();
+ // increment reference count so that we can release the generator at the end
+ m_base->AddRef();
+}
+
bool SCA_RandomActuator::Update()
{
//bool result = false; /*unused*/
Modified: trunk/blender/source/gameengine/GameLogic/SCA_RandomActuator.h
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_RandomActuator.h 2009-06-01 17:23:35 UTC (rev 20563)
+++ trunk/blender/source/gameengine/GameLogic/SCA_RandomActuator.h 2009-06-01 18:41:58 UTC (rev 20564)
@@ -91,6 +91,7 @@
virtual bool Update();
virtual CValue* GetReplica();
+ virtual void ProcessReplica();
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
More information about the Bf-blender-cvs
mailing list