Git commit 324e7e07eabf50603fdcce914346ecb81a31b51a by Shaheed Haque. Committed on 30/06/2012 at 23:52. Pushed by shaheed into branch 'master'. Add some defences to avoid some crashes I cannot reproduce the crashes that Dominik is seeing, but try to add some defences against the crash he is seeing. M +9 -7 kate/plugins/pate/src/engine.cpp M +10 -8 kate/plugins/pate/src/plugin.cpp http://commits.kde.org/kate/324e7e07eabf50603fdcce914346ecb81a31b51a diff --git a/kate/plugins/pate/src/engine.cpp b/kate/plugins/pate/src/engin= e.cpp index c2dac1d..1ffe0bd 100644 --- a/kate/plugins/pate/src/engine.cpp +++ b/kate/plugins/pate/src/engine.cpp @@ -420,15 +420,17 @@ void Pate::Engine::unloadModules() Python py =3D Python(); PyObject *modules =3D PyImport_GetModuleDict(); PyObject *plugins =3D py.itemString("plugins"); - for(Py_ssize_t i =3D 0, j =3D PyList_Size(plugins); i < j; ++i) { - PyObject *pluginName =3D py.itemString("__name__", PyModule_GetDic= t(PyList_GetItem(plugins, i))); - if(pluginName && PyDict_Contains(modules, pluginName)) { - PyDict_DelItem(modules, pluginName); - kDebug() << "Deleted" << PyString_AsString(pluginName) << "fro= m sys.modules"; + if (plugins) { + for (Py_ssize_t i =3D 0, j =3D PyList_Size(plugins); i < j; ++i) { + PyObject *pluginName =3D py.itemString("__name__", PyModule_Ge= tDict(PyList_GetItem(plugins, i))); + if(pluginName && PyDict_Contains(modules, pluginName)) { + PyDict_DelItem(modules, pluginName); + kDebug() << "Deleted" << PyString_AsString(pluginName) << = "from sys.modules"; + } } + py.itemStringDel("plugins"); + Py_DECREF(plugins); } - py.itemStringDel("plugins"); - Py_DECREF(plugins); m_pluginsLoaded =3D false; py.functionCall("_pluginsUnloaded"); } diff --git a/kate/plugins/pate/src/plugin.cpp b/kate/plugins/pate/src/plugi= n.cpp index 53f9c4f..d62367b 100644 --- a/kate/plugins/pate/src/plugin.cpp +++ b/kate/plugins/pate/src/plugin.cpp @@ -122,7 +122,7 @@ void Pate::Plugin::reloadModuleConfigPages() const Python py =3D Python(); PyObject *configPages =3D py.moduleConfigPages(PQ(pluginName)); if (configPages) { - for(Py_ssize_t k =3D 0, l =3D PyList_Size(configPages); k = < l; ++k) { + for (Py_ssize_t k =3D 0, l =3D PyList_Size(configPages); k= < l; ++k) { // Add an action for this plugin. PyObject *tuple =3D PyList_GetItem(configPages, k); Py_INCREF(tuple); @@ -290,12 +290,14 @@ void Pate::ConfigPage::reloadPage() // Add a topic for each plugin. using stacked page 1. Python py =3D Python(); PyObject *plugins =3D py.itemString("plugins"); - for(Py_ssize_t i =3D 0, j =3D PyList_Size(plugins); i < j; ++i) { - PyObject *module =3D PyList_GetItem(plugins, i); + if (plugins) { + for (Py_ssize_t i =3D 0, j =3D PyList_Size(plugins); i < j; ++i) { + PyObject *module =3D PyList_GetItem(plugins, i); = - // Add a topic for this plugin, using stacked page 1. - topic =3D QLatin1String(PyModule_GetName(module)); - m_info.topics->addItem(KIcon("text-x-python"), topic); + // Add a topic for this plugin, using stacked page 1. + topic =3D QLatin1String(PyModule_GetName(module)); + m_info.topics->addItem(KIcon("text-x-python"), topic); + } } infoTopicChanged(0); } @@ -323,7 +325,7 @@ void Pate::ConfigPage::infoTopicChanged(int topicIndex) Py_XDECREF(m_pluginActions); m_pluginActions =3D py.moduleActions(PQ(topic)); if (m_pluginActions) { - for(Py_ssize_t i =3D 0, j =3D PyList_Size(m_pluginActions); i < j;= ++i) { + for (Py_ssize_t i =3D 0, j =3D PyList_Size(m_pluginActions); i < j= ; ++i) { PyObject *tuple =3D PyList_GetItem(m_pluginActions, i); PyObject *functionName =3D PyTuple_GetItem(tuple, 0); = @@ -340,7 +342,7 @@ void Pate::ConfigPage::infoTopicChanged(int topicIndex) Py_XDECREF(m_pluginConfigPages); m_pluginConfigPages =3D py.moduleConfigPages(PQ(topic)); if (m_pluginConfigPages) { - for(Py_ssize_t i =3D 0, j =3D PyList_Size(m_pluginConfigPages); i = < j; ++i) { + for (Py_ssize_t i =3D 0, j =3D PyList_Size(m_pluginConfigPages); i= < j; ++i) { PyObject *tuple =3D PyList_GetItem(m_pluginConfigPages, i); PyObject *functionName =3D PyTuple_GetItem(tuple, 0); =