[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20046] trunk/blender/source/gameengine/ GameLogic/SCA_LogicManager.cpp: BGE: fix a crash with previous scene destruction speed up commit when sensors and controllers are cross connected between objects .
Benoit Bolsee
benoit.bolsee at online.be
Sun May 3 23:42:39 CEST 2009
Revision: 20046
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20046
Author: ben2610
Date: 2009-05-03 23:42:39 +0200 (Sun, 03 May 2009)
Log Message:
-----------
BGE: fix a crash with previous scene destruction speed up commit when sensors and controllers are cross connected between objects.
Modified Paths:
--------------
trunk/blender/source/gameengine/GameLogic/SCA_LogicManager.cpp
Modified: trunk/blender/source/gameengine/GameLogic/SCA_LogicManager.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_LogicManager.cpp 2009-05-03 20:47:29 UTC (rev 20045)
+++ trunk/blender/source/gameengine/GameLogic/SCA_LogicManager.cpp 2009-05-03 21:42:39 UTC (rev 20046)
@@ -193,10 +193,20 @@
void SCA_LogicManager::RemoveController(SCA_IController* controller)
{
+ sensormap_t::iterator sit;
+ sit = m_sensorcontrollermapje.begin();
+ if (sit==m_sensorcontrollermapje.end())
+ {
+ //TRICK: either there is no sensor at all, or the scene is being deleted
+ //(see KX_Scene::~KX_Scene()). In the first case, this is harmless.
+ //In the second case, we cannot rely on the sensor being still available,
+ //make the controller inactive to avoid link count.
+ //Need a better solution, maybe something similar to m_removedActuators.
+ controller->SetActive(false);
+ }
controller->UnlinkAllSensors();
controller->UnlinkAllActuators();
- sensormap_t::iterator sit;
- for (sit = m_sensorcontrollermapje.begin();!(sit==m_sensorcontrollermapje.end());++sit)
+ for (;!(sit==m_sensorcontrollermapje.end());++sit)
{
(*sit).second.remove(controller);
}
More information about the Bf-blender-cvs
mailing list