[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