]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Fixed some references leaks in sys.
authorChristian Heimes <christian@cheimes.de>
Wed, 30 Jan 2008 17:21:22 +0000 (17:21 +0000)
committerChristian Heimes <christian@cheimes.de>
Wed, 30 Jan 2008 17:21:22 +0000 (17:21 +0000)
Objects/floatobject.c
Python/import.c
Python/sysmodule.c

index 3d70e3a2800827e4c9abbbb94ec220bc29511052..689edcdb5ade3cc313610b1834e5c89393b9c9aa 100644 (file)
@@ -143,7 +143,6 @@ PyFloat_GetInfo(void)
                return NULL;
        }
 
-       Py_INCREF(floatinfo);
        return floatinfo;
 }
 
index 71ec20a252e40363305bd0434eb07663d5369fb8..0b0d81068dc539028c96d5af9d6da91d46940a4a 100644 (file)
@@ -370,6 +370,8 @@ static char* sys_deletes[] = {
        "exc_type", "exc_value", "exc_traceback",
        "last_type", "last_value", "last_traceback",
        "path_hooks", "path_importer_cache", "meta_path",
+       /* misc stuff */
+       "flags", "float_info",
        NULL
 };
 
index f9fb81596e416946a86fdd62443e149ac05ec51b..80d24d1911a3087b649ef47200f9880f8cf51c8f 100644 (file)
@@ -1181,7 +1181,6 @@ make_flags(void)
                return NULL;
        }
 
-       Py_INCREF(seq);
        return seq;
 }
 
@@ -1199,6 +1198,11 @@ _PySys_Init(void)
        if (m == NULL)
                return NULL;
        sysdict = PyModule_GetDict(m);
+#define SET_SYS_FROM_STRING(key, value)                        \
+       v = value;                                      \
+       if (v != NULL)                                  \
+               PyDict_SetItemString(sysdict, key, v);  \
+       Py_XDECREF(v)
 
        {
                /* XXX: does this work on Win/Win64? (see posix_fstat) */
@@ -1258,19 +1262,17 @@ _PySys_Init(void)
        Py_XDECREF(sysin);
        Py_XDECREF(sysout);
        Py_XDECREF(syserr);
-       PyDict_SetItemString(sysdict, "version",
-                            v = PyString_FromString(Py_GetVersion()));
-       Py_XDECREF(v);
-       PyDict_SetItemString(sysdict, "hexversion",
-                            v = PyInt_FromLong(PY_VERSION_HEX));
-       Py_XDECREF(v);
+
+       SET_SYS_FROM_STRING("version",
+                            PyString_FromString(Py_GetVersion()));
+       SET_SYS_FROM_STRING("hexversion",
+                            PyInt_FromLong(PY_VERSION_HEX));
        svnversion_init();
-       v = Py_BuildValue("(ssz)", "CPython", branch, svn_revision);
-       PyDict_SetItemString(sysdict, "subversion", v);
-       Py_XDECREF(v);
-       PyDict_SetItemString(sysdict, "dont_write_bytecode",
-                            v = PyBool_FromLong(Py_DontWriteBytecodeFlag));
-       Py_XDECREF(v);
+       SET_SYS_FROM_STRING("subversion",
+                           Py_BuildValue("(ssz)", "CPython", branch,
+                                         svn_revision));
+       SET_SYS_FROM_STRING("dont_write_bytecode",
+                           PyBool_FromLong(Py_DontWriteBytecodeFlag));
        /*
         * These release level checks are mutually exclusive and cover
         * the field, so don't get too fancy with the pre-processor!
@@ -1285,12 +1287,6 @@ _PySys_Init(void)
        s = "final";
 #endif
 
-#define SET_SYS_FROM_STRING(key, value)                        \
-       v = value;                                      \
-       if (v != NULL)                                  \
-               PyDict_SetItemString(sysdict, key, v);  \
-       Py_XDECREF(v)
-
        SET_SYS_FROM_STRING("version_info",
                            Py_BuildValue("iiisi", PY_MAJOR_VERSION,
                                               PY_MINOR_VERSION,
@@ -1340,7 +1336,6 @@ _PySys_Init(void)
        SET_SYS_FROM_STRING("winver",
                            PyString_FromString(PyWin_DLLVersionString));
 #endif
-#undef SET_SYS_FROM_STRING
        if (warnoptions == NULL) {
                warnoptions = PyList_New(0);
        }
@@ -1352,11 +1347,12 @@ _PySys_Init(void)
        }
 
        PyStructSequence_InitType(&FlagsType, &flags_desc);
-       PyDict_SetItemString(sysdict, "flags", make_flags());
+       SET_SYS_FROM_STRING("flags", make_flags());
        /* prevent user from creating new instances */
        FlagsType.tp_init = NULL;
        FlagsType.tp_new = NULL;
 
+#undef SET_SYS_FROM_STRING
        if (PyErr_Occurred())
                return NULL;
        return m;