[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kate] kate/plugins/pate/src: Add some defences to avoid some crashes
From:       Shaheed Haque <srhaque () theiet ! org>
Date:       2012-06-30 22:49:12
Message-ID: 20120630224912.A79E4A60A6 () git ! kde ! org
[Download RAW message or body]

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/engine.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 = Python();
     PyObject *modules = PyImport_GetModuleDict();
     PyObject *plugins = py.itemString("plugins");
-    for(Py_ssize_t i = 0, j = PyList_Size(plugins); i < j; ++i) {
-        PyObject *pluginName = py.itemString("__name__", \
                PyModule_GetDict(PyList_GetItem(plugins, i)));
-        if(pluginName && PyDict_Contains(modules, pluginName)) {
-            PyDict_DelItem(modules, pluginName);
-            kDebug() << "Deleted" << PyString_AsString(pluginName) << "from \
sys.modules"; +    if (plugins) {
+        for (Py_ssize_t i = 0, j = PyList_Size(plugins); i < j; ++i) {
+            PyObject *pluginName = py.itemString("__name__", \
PyModule_GetDict(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 = false;
     py.functionCall("_pluginsUnloaded");
 }
diff --git a/kate/plugins/pate/src/plugin.cpp b/kate/plugins/pate/src/plugin.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 = Python();
             PyObject *configPages = py.moduleConfigPages(PQ(pluginName));
             if (configPages) {
-                for(Py_ssize_t k = 0, l = PyList_Size(configPages); k < l; ++k) {
+                for (Py_ssize_t k = 0, l = PyList_Size(configPages); k < l; ++k) {
                     // Add an action for this plugin.
                     PyObject *tuple = 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 = Python();
     PyObject *plugins = py.itemString("plugins");
-    for(Py_ssize_t i = 0, j = PyList_Size(plugins); i < j; ++i) {
-        PyObject *module = PyList_GetItem(plugins, i);
+    if (plugins) {
+        for (Py_ssize_t i = 0, j = PyList_Size(plugins); i < j; ++i) {
+            PyObject *module = PyList_GetItem(plugins, i);
 
-        // Add a topic for this plugin, using stacked page 1.
-        topic = QLatin1String(PyModule_GetName(module));
-        m_info.topics->addItem(KIcon("text-x-python"), topic);
+            // Add a topic for this plugin, using stacked page 1.
+            topic = 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 = py.moduleActions(PQ(topic));
     if (m_pluginActions) {
-        for(Py_ssize_t i = 0, j = PyList_Size(m_pluginActions); i < j; ++i) {
+        for (Py_ssize_t i = 0, j = PyList_Size(m_pluginActions); i < j; ++i) {
             PyObject *tuple = PyList_GetItem(m_pluginActions, i);
             PyObject *functionName = PyTuple_GetItem(tuple, 0);
 
@@ -340,7 +342,7 @@ void Pate::ConfigPage::infoTopicChanged(int topicIndex)
     Py_XDECREF(m_pluginConfigPages);
     m_pluginConfigPages = py.moduleConfigPages(PQ(topic));
     if (m_pluginConfigPages) {
-        for(Py_ssize_t i = 0, j = PyList_Size(m_pluginConfigPages); i < j; ++i) {
+        for (Py_ssize_t i = 0, j = PyList_Size(m_pluginConfigPages); i < j; ++i) {
             PyObject *tuple = PyList_GetItem(m_pluginConfigPages, i);
             PyObject *functionName = PyTuple_GetItem(tuple, 0);
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic