[Python-checkins] r45459 - in python/trunk: Misc/NEWS Modules/_lsprof.c Modules/grpmodule.c Modules/posixmodule.c Modules/pwdmodule.c Modules/resource.c Modules/spwdmodule.c Modules/timemodule.c

martin.v.loewis python-checkins at python.org
Sun Apr 16 20:55:51 CEST 2006


Author: martin.v.loewis
Date: Sun Apr 16 20:55:50 2006
New Revision: 45459

Modified:
   python/trunk/Misc/NEWS
   python/trunk/Modules/_lsprof.c
   python/trunk/Modules/grpmodule.c
   python/trunk/Modules/posixmodule.c
   python/trunk/Modules/pwdmodule.c
   python/trunk/Modules/resource.c
   python/trunk/Modules/spwdmodule.c
   python/trunk/Modules/timemodule.c
Log:
Initialize structseq types only once.


Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Sun Apr 16 20:55:50 2006
@@ -12,6 +12,10 @@
 Core and builtins
 -----------------
 
+- All uses of PyStructSequence_InitType have been changed to initialize
+  the type objects only once, even if the interpreter is initialized
+  multiple times.
+
 - Bug #1454485, array.array('u') could crash the interpreter.  This was
   due to PyArgs_ParseTuple(args, 'u#', ...) trying to convert buffers (strings)
   to unicode when it didn't make sense.  'u#' now requires a unicode string.

Modified: python/trunk/Modules/_lsprof.c
==============================================================================
--- python/trunk/Modules/_lsprof.c	(original)
+++ python/trunk/Modules/_lsprof.c	Sun Apr 16 20:55:50 2006
@@ -515,6 +515,7 @@
 	5
 };
 
+static int initialized;
 static PyTypeObject StatsEntryType;
 static PyTypeObject StatsSubEntryType;
 
@@ -857,8 +858,12 @@
 		return;
 	PyDict_SetItemString(d, "Profiler", (PyObject *)&PyProfiler_Type);
 
-	PyStructSequence_InitType(&StatsEntryType, &profiler_entry_desc);
-	PyStructSequence_InitType(&StatsSubEntryType, &profiler_subentry_desc);
+	if (!initialized) {
+		PyStructSequence_InitType(&StatsEntryType, 
+					  &profiler_entry_desc);
+		PyStructSequence_InitType(&StatsSubEntryType, 
+					  &profiler_subentry_desc);
+	}
 	Py_INCREF((PyObject*) &StatsEntryType);
 	Py_INCREF((PyObject*) &StatsSubEntryType);
 	PyModule_AddObject(module, "profiler_entry",
@@ -866,4 +871,5 @@
 	PyModule_AddObject(module, "profiler_subentry",
 			   (PyObject*) &StatsSubEntryType);
 	empty_tuple = PyTuple_New(0);
+	initialized = 1;
 }

Modified: python/trunk/Modules/grpmodule.c
==============================================================================
--- python/trunk/Modules/grpmodule.c	(original)
+++ python/trunk/Modules/grpmodule.c	Sun Apr 16 20:55:50 2006
@@ -29,6 +29,7 @@
 };
 
 
+static int initialized;
 static PyTypeObject StructGrpType;
 
 static PyObject *
@@ -174,6 +175,8 @@
     if (m == NULL)
         return;
     d = PyModule_GetDict(m);
-    PyStructSequence_InitType(&StructGrpType, &struct_group_type_desc);
+    if (!initialized)
+	    PyStructSequence_InitType(&StructGrpType, &struct_group_type_desc);
     PyDict_SetItemString(d, "struct_group", (PyObject *) &StructGrpType);
+    initialized = 1;
 }

Modified: python/trunk/Modules/posixmodule.c
==============================================================================
--- python/trunk/Modules/posixmodule.c	(original)
+++ python/trunk/Modules/posixmodule.c	Sun Apr 16 20:55:50 2006
@@ -981,6 +981,7 @@
 	10
 };
 
+static int initialized;
 static PyTypeObject StatResultType;
 static PyTypeObject StatVFSResultType;
 static newfunc structseq_new;
@@ -8241,21 +8242,24 @@
 		posix_putenv_garbage = PyDict_New();
 #endif
 
-	stat_result_desc.name = MODNAME ".stat_result";
-	stat_result_desc.fields[7].name = PyStructSequence_UnnamedField;
-	stat_result_desc.fields[8].name = PyStructSequence_UnnamedField;
-	stat_result_desc.fields[9].name = PyStructSequence_UnnamedField;
-	PyStructSequence_InitType(&StatResultType, &stat_result_desc);
-	structseq_new = StatResultType.tp_new;
-	StatResultType.tp_new = statresult_new;
+	if (!initialized) {
+		stat_result_desc.name = MODNAME ".stat_result";
+		stat_result_desc.fields[7].name = PyStructSequence_UnnamedField;
+		stat_result_desc.fields[8].name = PyStructSequence_UnnamedField;
+		stat_result_desc.fields[9].name = PyStructSequence_UnnamedField;
+		PyStructSequence_InitType(&StatResultType, &stat_result_desc);
+		structseq_new = StatResultType.tp_new;
+		StatResultType.tp_new = statresult_new;
+
+		statvfs_result_desc.name = MODNAME ".statvfs_result";
+		PyStructSequence_InitType(&StatVFSResultType, &statvfs_result_desc);
+	}
 	Py_INCREF((PyObject*) &StatResultType);
 	PyModule_AddObject(m, "stat_result", (PyObject*) &StatResultType);
-
-	statvfs_result_desc.name = MODNAME ".statvfs_result";
-	PyStructSequence_InitType(&StatVFSResultType, &statvfs_result_desc);
 	Py_INCREF((PyObject*) &StatVFSResultType);
 	PyModule_AddObject(m, "statvfs_result",
 			   (PyObject*) &StatVFSResultType);
+	initialized = 1;
 }
 
 #ifdef __cplusplus

Modified: python/trunk/Modules/pwdmodule.c
==============================================================================
--- python/trunk/Modules/pwdmodule.c	(original)
+++ python/trunk/Modules/pwdmodule.c	Sun Apr 16 20:55:50 2006
@@ -42,6 +42,7 @@
 exception is raised if the entry asked for cannot be found.");
 
       
+static int initialized;
 static PyTypeObject StructPwdType;
 
 static void
@@ -186,9 +187,12 @@
 	if (m == NULL)
     		return;
 
-	PyStructSequence_InitType(&StructPwdType, &struct_pwd_type_desc);
+	if (!initialized)
+		PyStructSequence_InitType(&StructPwdType, 
+					  &struct_pwd_type_desc);
 	Py_INCREF((PyObject *) &StructPwdType);
 	PyModule_AddObject(m, "struct_passwd", (PyObject *) &StructPwdType);
 	/* And for b/w compatibility (this was defined by mistake): */
 	PyModule_AddObject(m, "struct_pwent", (PyObject *) &StructPwdType);
+	initialized = 1;
 }

Modified: python/trunk/Modules/resource.c
==============================================================================
--- python/trunk/Modules/resource.c	(original)
+++ python/trunk/Modules/resource.c	Sun Apr 16 20:55:50 2006
@@ -55,6 +55,7 @@
 	16	/* n_in_sequence */
 };
 
+static int initialized;
 static PyTypeObject StructRUsageType;
 
 static PyObject *
@@ -244,7 +245,10 @@
 	}
 	Py_INCREF(ResourceError);
 	PyModule_AddObject(m, "error", ResourceError);
- 	PyStructSequence_InitType(&StructRUsageType, &struct_rusage_desc);
+	if (!initialized)
+		PyStructSequence_InitType(&StructRUsageType, 
+					  &struct_rusage_desc);
+	Py_INCREF(&StructRUsageType);
  	PyModule_AddObject(m, "struct_rusage", 
 			   (PyObject*) &StructRUsageType);
 
@@ -320,4 +324,5 @@
 	if (v) {
 		PyModule_AddObject(m, "RLIM_INFINITY", v);
 	}
+	initialized = 1;
 }

Modified: python/trunk/Modules/spwdmodule.c
==============================================================================
--- python/trunk/Modules/spwdmodule.c	(original)
+++ python/trunk/Modules/spwdmodule.c	Sun Apr 16 20:55:50 2006
@@ -52,6 +52,7 @@
 	9,
 };
 
+static int initialized;
 static PyTypeObject StructSpwdType;
 
 
@@ -173,7 +174,10 @@
 	m=Py_InitModule3("spwd", spwd_methods, spwd__doc__);
 	if (m == NULL)
 		return;
-	PyStructSequence_InitType(&StructSpwdType, &struct_spwd_type_desc);
+	if (!initialized)
+		PyStructSequence_InitType(&StructSpwdType, 
+					  &struct_spwd_type_desc);
 	Py_INCREF((PyObject *) &StructSpwdType);
 	PyModule_AddObject(m, "struct_spwd", (PyObject *) &StructSpwdType);
+	initialized = 1;
 }

Modified: python/trunk/Modules/timemodule.c
==============================================================================
--- python/trunk/Modules/timemodule.c	(original)
+++ python/trunk/Modules/timemodule.c	Sun Apr 16 20:55:50 2006
@@ -228,6 +228,7 @@
 	9,
 };
 
+static int initialized;
 static PyTypeObject StructTimeType;
 
 static PyObject *
@@ -807,9 +808,13 @@
 	hInterruptEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
 	SetConsoleCtrlHandler( PyCtrlHandler, TRUE);
 #endif /* MS_WINDOWS */
-        PyStructSequence_InitType(&StructTimeType, &struct_time_type_desc);
+	if (!initialized) {
+		PyStructSequence_InitType(&StructTimeType, 
+					  &struct_time_type_desc);
+	}
 	Py_INCREF(&StructTimeType);
 	PyModule_AddObject(m, "struct_time", (PyObject*) &StructTimeType);
+	initialized = 1;
 }
 
 


More information about the Python-checkins mailing list