diff options
author | Mitchell Stokes <mogurijin@gmail.com> | 2013-01-12 09:44:08 +0400 |
---|---|---|
committer | Mitchell Stokes <mogurijin@gmail.com> | 2013-01-12 09:44:08 +0400 |
commit | 03df7e9a564d1ba6366b5d6b587b9319158ca198 (patch) | |
tree | 13e6ac427d2f5171998c3cff47c1b87d90ddbed1 /source/gameengine/Ketsji | |
parent | 2f4cc3530da0496b58a856849bd9fc6954e138be (diff) |
BGE: Fix for [#33839] "a logic.joysticks Crashes BGE" reported by Josiah Lane (solarlune).
On a scene change the SCA_JoystickManager gets destroyed which in turn means all of it's joystick instances are released. Since SCA_PythonJoystick was just using a borrowed reference, this allowed the joystick to be freed. Now the joystick's refcount is incremented so that the SCA_PythonJoystick's joystick reference will survive across scene changes.
Diffstat (limited to 'source/gameengine/Ketsji')
-rw-r--r-- | source/gameengine/Ketsji/KX_PythonInit.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp index 6b3f745b899..a54d4909db9 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.cpp +++ b/source/gameengine/Ketsji/KX_PythonInit.cpp @@ -1428,15 +1428,15 @@ PyObject *initGameLogic(KX_KetsjiEngine *engine, KX_Scene* scene) // quick hack PyDict_SetItemString(d, "mouse", gp_PythonMouse->NewProxy(true)); PyObject* joylist = PyList_New(JOYINDEX_MAX); - SCA_JoystickManager* joyevent = (SCA_JoystickManager*)gp_KetsjiScene->GetLogicManager()->FindEventManager(SCA_EventManager::JOY_EVENTMGR); for (int i=0; i<JOYINDEX_MAX; ++i) { - SCA_Joystick* joy = joyevent->GetJoystickDevice(i); + SCA_Joystick* joy = SCA_Joystick::GetInstance(i); if (joy && joy->Connected()) { gp_PythonJoysticks[i] = new SCA_PythonJoystick(joy); PyObject* tmp = gp_PythonJoysticks[i]->NewProxy(true); Py_INCREF(tmp); PyList_SET_ITEM(joylist, i, tmp); } else { + joy->ReleaseInstance(); Py_INCREF(Py_None); PyList_SET_ITEM(joylist, i, Py_None); } |