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/branches/1.3@1800 a5681a0c-68f1-0310-ab6d-d61299d08faa

program/bindings/python/rrdtoolmodule.c

index 2771720711310ab670cfc1e0ac2589122cae0c2d..2df98066f140af33fe63798cd4dea54019ebee0b 100644 (file)
@@ -435,6 +435,7 @@ static PyObject *PyDict_FromInfo(
         }
         if (val) {
             PyDict_SetItemString(r, data->key, val);
+            Py_DECREF(val);
         }
         data = data->next;
     }
@@ -459,10 +460,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;
 }
 
@@ -484,10 +488,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;
 }
 
@@ -509,10 +516,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;
 }