The previous change was causing a segfault after multiple calls to Py_Initialize() and Py_Finalize().

This commit is contained in:
Christian Heimes 2008-01-30 18:58:29 +00:00
parent 0d9244332b
commit 796fc31585
2 changed files with 8 additions and 12 deletions

View File

@ -66,7 +66,7 @@ PyFloat_GetMin(void)
return DBL_MIN; return DBL_MIN;
} }
static PyTypeObject FloatInfoType = {0}; static PyTypeObject FloatInfoType = {0, 0, 0, 0, 0, 0};
PyDoc_STRVAR(floatinfo__doc__, PyDoc_STRVAR(floatinfo__doc__,
"sys.floatinfo\n\ "sys.floatinfo\n\
@ -105,15 +105,9 @@ static PyStructSequence_Desc floatinfo_desc = {
PyObject * PyObject *
PyFloat_GetInfo(void) PyFloat_GetInfo(void)
{ {
static PyObject* floatinfo; PyObject* floatinfo;
int pos = 0; int pos = 0;
if (floatinfo != NULL) {
Py_INCREF(floatinfo);
return floatinfo;
}
PyStructSequence_InitType(&FloatInfoType, &floatinfo_desc);
floatinfo = PyStructSequence_New(&FloatInfoType); floatinfo = PyStructSequence_New(&FloatInfoType);
if (floatinfo == NULL) { if (floatinfo == NULL) {
return NULL; return NULL;
@ -142,7 +136,6 @@ PyFloat_GetInfo(void)
Py_CLEAR(floatinfo); Py_CLEAR(floatinfo);
return NULL; return NULL;
} }
return floatinfo; return floatinfo;
} }
@ -1669,6 +1662,9 @@ _PyFloat_Init(void)
/* Initialize floating point repr */ /* Initialize floating point repr */
_PyFloat_DigitsInit(); _PyFloat_DigitsInit();
#endif #endif
/* Init float info */
if (FloatInfoType.tp_name == 0)
PyStructSequence_InitType(&FloatInfoType, &floatinfo_desc);
} }
void void

View File

@ -1107,7 +1107,7 @@ PyDoc_STRVAR(flags__doc__,
\n\ \n\
Flags provided through command line arguments or environment vars."); 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[] = { static PyStructSequence_Field flags_fields[] = {
{"debug", "-d"}, {"debug", "-d"},
@ -1180,7 +1180,6 @@ make_flags(void)
if (PyErr_Occurred()) { if (PyErr_Occurred()) {
return NULL; return NULL;
} }
return seq; return seq;
} }
@ -1346,6 +1345,7 @@ _PySys_Init(void)
PyDict_SetItemString(sysdict, "warnoptions", warnoptions); PyDict_SetItemString(sysdict, "warnoptions", warnoptions);
} }
if (FlagsType.tp_name == 0)
PyStructSequence_InitType(&FlagsType, &flags_desc); PyStructSequence_InitType(&FlagsType, &flags_desc);
SET_SYS_FROM_STRING("flags", make_flags()); SET_SYS_FROM_STRING("flags", make_flags());
/* prevent user from creating new instances */ /* prevent user from creating new instances */