[Python-checkins] r60450 - in python/trunk: Objects/floatobject.c Python/sysmodule.c
christian.heimes
python-checkins at python.org
Wed Jan 30 19:58:29 CET 2008
Author: christian.heimes
Date: Wed Jan 30 19:58:29 2008
New Revision: 60450
Modified:
python/trunk/Objects/floatobject.c
python/trunk/Python/sysmodule.c
Log:
The previous change was causing a segfault after multiple calls to Py_Initialize() and Py_Finalize().
Modified: python/trunk/Objects/floatobject.c
==============================================================================
--- python/trunk/Objects/floatobject.c (original)
+++ python/trunk/Objects/floatobject.c Wed Jan 30 19:58:29 2008
@@ -66,7 +66,7 @@
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 @@
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 @@
Py_CLEAR(floatinfo);
return NULL;
}
-
return floatinfo;
}
@@ -1669,6 +1662,9 @@
/* Initialize floating point repr */
_PyFloat_DigitsInit();
#endif
+ /* Init float info */
+ if (FloatInfoType.tp_name == 0)
+ PyStructSequence_InitType(&FloatInfoType, &floatinfo_desc);
}
void
Modified: python/trunk/Python/sysmodule.c
==============================================================================
--- python/trunk/Python/sysmodule.c (original)
+++ python/trunk/Python/sysmodule.c Wed Jan 30 19:58:29 2008
@@ -1107,7 +1107,7 @@
\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 @@
if (PyErr_Occurred()) {
return NULL;
}
-
return seq;
}
@@ -1346,7 +1345,8 @@
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;
More information about the Python-checkins
mailing list