[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35792] trunk/blender: fix for blenderplayer crashing on exit.
Campbell Barton
ideasman42 at gmail.com
Sat Mar 26 09:13:43 CET 2011
Revision: 35792
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35792
Author: campbellbarton
Date: 2011-03-26 08:13:42 +0000 (Sat, 26 Mar 2011)
Log Message:
-----------
fix for blenderplayer crashing on exit.
the event consumer was being freed twice, once when going out of C++ scope, another when freeing the system.
Modified Paths:
--------------
trunk/blender/intern/ghost/GHOST_C-api.h
trunk/blender/intern/ghost/GHOST_ISystem.h
trunk/blender/intern/ghost/intern/GHOST_C-api.cpp
trunk/blender/intern/ghost/intern/GHOST_System.cpp
trunk/blender/intern/ghost/intern/GHOST_System.h
trunk/blender/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
Modified: trunk/blender/intern/ghost/GHOST_C-api.h
===================================================================
--- trunk/blender/intern/ghost/GHOST_C-api.h 2011-03-26 05:52:18 UTC (rev 35791)
+++ trunk/blender/intern/ghost/GHOST_C-api.h 2011-03-26 08:13:42 UTC (rev 35792)
@@ -262,7 +262,16 @@
*/
extern GHOST_TSuccess GHOST_AddEventConsumer(GHOST_SystemHandle systemhandle,
GHOST_EventConsumerHandle consumerhandle);
-
+
+/**
+ * Remove the given event consumer to our list.
+ * @param systemhandle The handle to the system
+ * @param consumerhandle The event consumer to remove.
+ * @return Indication of success.
+ */
+extern GHOST_TSuccess GHOST_RemoveEventConsumer(GHOST_SystemHandle systemhandle,
+ GHOST_EventConsumerHandle consumerhandle);
+
/***************************************************************************************
** Progress bar functionality
***************************************************************************************/
Modified: trunk/blender/intern/ghost/GHOST_ISystem.h
===================================================================
--- trunk/blender/intern/ghost/GHOST_ISystem.h 2011-03-26 05:52:18 UTC (rev 35791)
+++ trunk/blender/intern/ghost/GHOST_ISystem.h 2011-03-26 08:13:42 UTC (rev 35792)
@@ -290,7 +290,14 @@
* @return Indication of success.
*/
virtual GHOST_TSuccess addEventConsumer(GHOST_IEventConsumer* consumer) = 0;
-
+
+ /**
+ * Removes the given event consumer to our list.
+ * @param consumer The event consumer to remove.
+ * @return Indication of success.
+ */
+ virtual GHOST_TSuccess removeEventConsumer(GHOST_IEventConsumer* consumer) = 0;
+
/***************************************************************************************
** N-degree of freedom device management functionality
***************************************************************************************/
Modified: trunk/blender/intern/ghost/intern/GHOST_C-api.cpp
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_C-api.cpp 2011-03-26 05:52:18 UTC (rev 35791)
+++ trunk/blender/intern/ghost/intern/GHOST_C-api.cpp 2011-03-26 08:13:42 UTC (rev 35792)
@@ -253,6 +253,13 @@
return system->addEventConsumer((GHOST_CallbackEventConsumer*)consumerhandle);
}
+GHOST_TSuccess GHOST_RemoveEventConsumer(GHOST_SystemHandle systemhandle, GHOST_EventConsumerHandle consumerhandle)
+{
+ GHOST_ISystem* system = (GHOST_ISystem*) systemhandle;
+
+ return system->removeEventConsumer((GHOST_CallbackEventConsumer*)consumerhandle);
+}
+
GHOST_TSuccess GHOST_SetProgressBar(GHOST_WindowHandle windowhandle,float progress)
{
GHOST_IWindow* window = (GHOST_IWindow*) windowhandle;
Modified: trunk/blender/intern/ghost/intern/GHOST_System.cpp
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_System.cpp 2011-03-26 05:52:18 UTC (rev 35791)
+++ trunk/blender/intern/ghost/intern/GHOST_System.cpp 2011-03-26 08:13:42 UTC (rev 35792)
@@ -226,6 +226,17 @@
return success;
}
+GHOST_TSuccess GHOST_System::removeEventConsumer(GHOST_IEventConsumer* consumer)
+{
+ GHOST_TSuccess success;
+ if (m_eventManager) {
+ success = m_eventManager->removeConsumer(consumer);
+ }
+ else {
+ success = GHOST_kFailure;
+ }
+ return success;
+}
GHOST_TSuccess GHOST_System::pushEvent(GHOST_IEvent* event)
{
Modified: trunk/blender/intern/ghost/intern/GHOST_System.h
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_System.h 2011-03-26 05:52:18 UTC (rev 35791)
+++ trunk/blender/intern/ghost/intern/GHOST_System.h 2011-03-26 08:13:42 UTC (rev 35792)
@@ -183,8 +183,13 @@
*/
virtual GHOST_TSuccess addEventConsumer(GHOST_IEventConsumer* consumer);
+ /**
+ * Remove the given event consumer to our list.
+ * @param consumer The event consumer to remove.
+ * @return Indication of success.
+ */
+ virtual GHOST_TSuccess removeEventConsumer(GHOST_IEventConsumer* consumer);
-
/***************************************************************************************
** N-degree of freedom devcice management functionality
***************************************************************************************/
Modified: trunk/blender/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
===================================================================
--- trunk/blender/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp 2011-03-26 05:52:18 UTC (rev 35791)
+++ trunk/blender/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp 2011-03-26 08:13:42 UTC (rev 35792)
@@ -939,6 +939,10 @@
}
app.StopGameEngine();
+ /* 'app' is freed automatic when out of scope.
+ * removal is needed else the system will free an already freed value */
+ system->removeEventConsumer(&app);
+
BLO_blendfiledata_free(bfd);
}
} while (exitcode == KX_EXIT_REQUEST_RESTART_GAME || exitcode == KX_EXIT_REQUEST_START_OTHER_GAME);
More information about the Bf-blender-cvs
mailing list