]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
The previous change was causing a segfault after multiple calls to Py_Initialize...
authorChristian Heimes <christian@cheimes.de>
Wed, 30 Jan 2008 18:58:29 +0000 (18:58 +0000)
committerChristian Heimes <christian@cheimes.de>
Wed, 30 Jan 2008 18:58:29 +0000 (18:58 +0000)
Objects/floatobject.c
Python/sysmodule.c

index 689edcdb5ade3cc313610b1834e5c89393b9c9aa..63512787a6b46565d7ae21701220474bf681480c 100644 (file)
@@ -66,7 +66,7 @@ PyFloat_GetMin(void)
        return DBL_MIN;
 }
 
-static PyTypeObject FloatInfoType = {0};
+static PyTypeObject FloatInfoType = {0, 0, 0, 0, 0, 0};
 
 PyDoc_STRVAR(floatinfo__doc__,
 "sys.floatinfo\n\
@@ -105,15 +105,9 @@ static PyStructSequence_Desc floatinfo_desc = {
 PyObject *
 PyFloat_GetInfo(void)
 {
-       static PyObject* floatinfo;
+       PyObject* floatinfo;
        int pos = 0;
 
-       if (floatinfo != NULL) {
-               Py_INCREF(floatinfo);
-               return floatinfo;
-       }
-       PyStructSequence_InitType(&FloatInfoType, &floatinfo_desc);
-       
        floatinfo = PyStructSequence_New(&FloatInfoType);
        if (floatinfo == NULL) {
                return NULL;
@@ -142,7 +136,6 @@ PyFloat_GetInfo(void)
                Py_CLEAR(floatinfo);
                return NULL;
        }
-
        return floatinfo;
 }
 
@@ -1669,6 +1662,9 @@ _PyFloat_Init(void)
        /* Initialize floating point repr */
        _PyFloat_DigitsInit();
 #endif
+       /* Init float info */
+       if (FloatInfoType.tp_name == 0)
+               PyStructSequence_InitType(&FloatInfoType, &floatinfo_desc);
 }
 
 void
index 80d24d1911a3087b649ef47200f9880f8cf51c8f..41830b9e4c88eecb7777ae4d2a31766b175dcae7 100644 (file)
@@ -1107,7 +1107,7 @@ PyDoc_STRVAR(flags__doc__,
 \n\
 Flags provided through command line arguments or environment vars.");
 
-static PyTypeObject FlagsType;
+static PyTypeObject FlagsType = {0, 0, 0, 0, 0, 0};
 
 static PyStructSequence_Field flags_fields[] = {
        {"debug",               "-d"},
@@ -1180,7 +1180,6 @@ make_flags(void)
        if (PyErr_Occurred()) {
                return NULL;
        }
-
        return seq;
 }
 
@@ -1346,7 +1345,8 @@ _PySys_Init(void)
                PyDict_SetItemString(sysdict, "warnoptions", warnoptions);
        }
 
-       PyStructSequence_InitType(&FlagsType, &flags_desc);
+       if (FlagsType.tp_name == 0)
+               PyStructSequence_InitType(&FlagsType, &flags_desc);
        SET_SYS_FROM_STRING("flags", make_flags());
        /* prevent user from creating new instances */
        FlagsType.tp_init = NULL;