Code

integrated fix for debian bug #529291 as supplied by Anders Hammarquist
authoroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Mon, 18 May 2009 14:23:23 +0000 (14:23 +0000)
committeroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Mon, 18 May 2009 14:23:23 +0000 (14:23 +0000)
git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk@1800 a5681a0c-68f1-0310-ab6d-d61299d08faa

program/bindings/python/rrdtoolmodule.c

index 6cc22ad632eabaf17dbaad6f8040f3ac3960db3c..85f63c7eabb56deb6dbbfda79e5aba72a472b70d 100644 (file)
@@ -466,6 +466,7 @@ static PyObject *PyDict_FromInfo(
         }
         if (val) {
             PyDict_SetItemString(r, data->key, val);
+            Py_DECREF(val);
         }
         data = data->next;
     }
@@ -490,10 +491,13 @@ static PyObject *PyRRD_info(
     if ((data = rrd_info(argc, argv)) == NULL) {
         PyErr_SetString(ErrorObject, rrd_get_error());
         rrd_clear_error();
-        return NULL;
+        r = NULL;
+    } else {
+        r = PyDict_FromInfo(data);
+        rrd_info_free(data);
     }
-    r = PyDict_FromInfo(data);
-    rrd_info_free(data);
+
+    destroy_args(&argv);
     return r;
 }
 
@@ -515,10 +519,13 @@ static PyObject *PyRRD_graphv(
     if ((data = rrd_graph_v(argc, argv)) == NULL) {
         PyErr_SetString(ErrorObject, rrd_get_error());
         rrd_clear_error();
-        return NULL;
+        r = NULL;
+    } else {
+        r = PyDict_FromInfo(data);
+        rrd_info_free(data);
     }
-    r = PyDict_FromInfo(data);
-    rrd_info_free(data);
+
+    destroy_args(&argv);
     return r;
 }
 
@@ -540,10 +547,13 @@ static PyObject *PyRRD_updatev(
     if ((data = rrd_update_v(argc, argv)) == NULL) {
         PyErr_SetString(ErrorObject, rrd_get_error());
         rrd_clear_error();
-        return NULL;
+        r = NULL;
+    } else {
+        r = PyDict_FromInfo(data);
+        rrd_info_free(data);
     }
-    r = PyDict_FromInfo(data);
-    rrd_info_free(data);
+
+    destroy_args(&argv);
     return r;
 }