Fixing a memory leak with SCA_PythonKeyboard and SCA_PythonMouse.

This commit is contained in:
Mitchell Stokes 2010-10-09 01:31:20 +00:00
parent 9bb10e571b
commit f7fb4e70b3

@ -141,6 +141,8 @@ static char gp_GamePythonPathOrig[FILE_MAXDIR + FILE_MAXFILE] = ""; // not super
static KX_Scene* gp_KetsjiScene = NULL;
static KX_KetsjiEngine* gp_KetsjiEngine = NULL;
static RAS_IRasterizer* gp_Rasterizer = NULL;
static SCA_PythonKeyboard* gp_PythonKeyboard = NULL;
static SCA_PythonMouse* gp_PythonMouse = NULL;
void KX_SetActiveScene(class KX_Scene* scene)
{
@ -1296,11 +1298,13 @@ PyObject* initGameLogic(KX_KetsjiEngine *engine, KX_Scene* scene) // quick hack
PyDict_SetItemString(d, "globalDict", item=PyDict_New()); Py_DECREF(item);
// Add keyboard and mouse attributes to this module
SCA_PythonKeyboard* pykeyb = new SCA_PythonKeyboard(gp_KetsjiEngine->GetKeyboardDevice());
PyDict_SetItemString(d, "keyboard", pykeyb->NewProxy(true));
MT_assert(!gp_PythonKeyboard);
gp_PythonKeyboard = new SCA_PythonKeyboard(gp_KetsjiEngine->GetKeyboardDevice());
PyDict_SetItemString(d, "keyboard", gp_PythonKeyboard->NewProxy(true));
SCA_PythonMouse* pymouse = new SCA_PythonMouse(gp_KetsjiEngine->GetMouseDevice(), gp_Canvas);
PyDict_SetItemString(d, "mouse", pymouse->NewProxy(true));
MT_assert(!gp_PythonMouse);
gp_PythonMouse = new SCA_PythonMouse(gp_KetsjiEngine->GetMouseDevice(), gp_Canvas);
PyDict_SetItemString(d, "mouse", gp_PythonMouse->NewProxy(true));
ErrorObject = PyUnicode_FromString("GameLogic.error");
PyDict_SetItemString(d, "error", ErrorObject);
@ -1926,6 +1930,13 @@ PyObject* initGamePlayerPythonScripting(const STR_String& progname, TPythonSecur
void exitGamePlayerPythonScripting()
{
/* Clean up the Python mouse and keyboard */
delete gp_PythonKeyboard;
gp_PythonKeyboard = NULL;
delete gp_PythonMouse;
gp_PythonMouse = NULL;
/* since python restarts we cant let the python backup of the sys.path hang around in a global pointer */
restorePySysObjects(); /* get back the original sys.path and clear the backup */
@ -1962,6 +1973,13 @@ PyObject* initGamePythonScripting(const STR_String& progname, TPythonSecurityLev
void exitGamePythonScripting()
{
/* Clean up the Python mouse and keyboard */
delete gp_PythonKeyboard;
gp_PythonKeyboard = NULL;
delete gp_PythonMouse;
gp_PythonMouse = NULL;
restorePySysObjects(); /* get back the original sys.path and clear the backup */
bpy_import_main_set(NULL);
PyObjectPlus::ClearDeprecationWarning();