summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2001-01-14 05:05:51 (GMT)
committerTim Peters <tim.peters@gmail.com>2001-01-14 05:05:51 (GMT)
commit2caf8df86802fb24a23ed2cf57674618b5a8f674 (patch)
treed458a669fe9b6733ad2e23eee82b00f39c955b4b
parentb9e202b2dc341f6bcca7719eb40d00f5e03ea4cf (diff)
downloadcpython-2caf8df86802fb24a23ed2cf57674618b5a8f674.zip
cpython-2caf8df86802fb24a23ed2cf57674618b5a8f674.tar.gz
cpython-2caf8df86802fb24a23ed2cf57674618b5a8f674.tar.bz2
SF bug 128713: type(mmap_object) blew up on Linux.
-rw-r--r--Lib/tempfile.py11
-rw-r--r--Lib/test/output/test_mmap1
-rw-r--r--Lib/test/test_mmap.py2
-rw-r--r--Modules/mmapmodule.c7
4 files changed, 16 insertions, 5 deletions
diff --git a/Lib/tempfile.py b/Lib/tempfile.py
index 8ac707d..3ad6d7c 100644
--- a/Lib/tempfile.py
+++ b/Lib/tempfile.py
@@ -89,6 +89,7 @@ elif os.name == 'mac':
else:
template = 'tmp' # XXX might choose a better one
+_pidcache = {}
def gettempprefix():
"""Function to calculate a prefix of the filename to use.
@@ -96,9 +97,15 @@ def gettempprefix():
notion, so that concurrent processes don't generate the same prefix.
"""
- global template
if template is None:
- return '@' + `os.getpid()` + '.'
+ p = os.getpid()
+ t = _pidcache.get(p, 0)
+ if t:
+ return t
+ if len(_pidcache) > 100: # stop unbounded growth
+ _pidcache.clear()
+ t = _pidcache[p] = '@' + `p` + '.'
+ return t
else:
return template
diff --git a/Lib/test/output/test_mmap b/Lib/test/output/test_mmap
index 24e28f8..ce2c823 100644
--- a/Lib/test/output/test_mmap
+++ b/Lib/test/output/test_mmap
@@ -1,4 +1,5 @@
test_mmap
+<type 'mmap'>
Position of foo: 1.0 pages
Length of file: 2.0 pages
Contents of byte 0: '\000'
diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py
index d07e4c6..7c49cf2 100644
--- a/Lib/test/test_mmap.py
+++ b/Lib/test/test_mmap.py
@@ -18,6 +18,8 @@ def test_both():
f.close()
# Simple sanity checks
+
+ print type(m) # SF bug 128713: segfaulted on Linux
print ' Position of foo:', string.find(m, 'foo') / float(PAGESIZE), 'pages'
assert string.find(m, 'foo') == PAGESIZE
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c
index c567e7b..c1cc013 100644
--- a/Modules/mmapmodule.c
+++ b/Modules/mmapmodule.c
@@ -841,9 +841,6 @@ new_mmap_object(PyObject *self, PyObject *args)
int fileno;
HANDLE fh = 0;
- /* Patch the object type */
- mmap_object_type.ob_type = &PyType_Type;
-
if (!PyArg_ParseTuple(args,
"iO|z",
&fileno,
@@ -956,6 +953,10 @@ DL_EXPORT(void)
initmmap(void)
{
PyObject *dict, *module;
+
+ /* Patch the object type */
+ mmap_object_type.ob_type = &PyType_Type;
+
module = Py_InitModule ("mmap", mmap_functions);
dict = PyModule_GetDict (module);
mmap_module_error = PyExc_EnvironmentError;