Commit 339c2d43 authored by Tim Peters's avatar Tim Peters

SF bug 128713: type(mmap_object) blew up on Linux.

parent b2df00c9
...@@ -89,6 +89,7 @@ elif os.name == 'mac': ...@@ -89,6 +89,7 @@ elif os.name == 'mac':
else: else:
template = 'tmp' # XXX might choose a better one template = 'tmp' # XXX might choose a better one
_pidcache = {}
def gettempprefix(): def gettempprefix():
"""Function to calculate a prefix of the filename to use. """Function to calculate a prefix of the filename to use.
...@@ -96,9 +97,15 @@ def gettempprefix(): ...@@ -96,9 +97,15 @@ def gettempprefix():
notion, so that concurrent processes don't generate the same prefix. notion, so that concurrent processes don't generate the same prefix.
""" """
global template
if template is None: 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: else:
return template return template
......
test_mmap test_mmap
<type 'mmap'>
Position of foo: 1.0 pages Position of foo: 1.0 pages
Length of file: 2.0 pages Length of file: 2.0 pages
Contents of byte 0: '\000' Contents of byte 0: '\000'
......
...@@ -18,6 +18,8 @@ def test_both(): ...@@ -18,6 +18,8 @@ def test_both():
f.close() f.close()
# Simple sanity checks # Simple sanity checks
print type(m) # SF bug 128713: segfaulted on Linux
print ' Position of foo:', string.find(m, 'foo') / float(PAGESIZE), 'pages' print ' Position of foo:', string.find(m, 'foo') / float(PAGESIZE), 'pages'
assert string.find(m, 'foo') == PAGESIZE assert string.find(m, 'foo') == PAGESIZE
......
...@@ -841,9 +841,6 @@ new_mmap_object(PyObject *self, PyObject *args) ...@@ -841,9 +841,6 @@ new_mmap_object(PyObject *self, PyObject *args)
int fileno; int fileno;
HANDLE fh = 0; HANDLE fh = 0;
/* Patch the object type */
mmap_object_type.ob_type = &PyType_Type;
if (!PyArg_ParseTuple(args, if (!PyArg_ParseTuple(args,
"iO|z", "iO|z",
&fileno, &fileno,
...@@ -956,6 +953,10 @@ DL_EXPORT(void) ...@@ -956,6 +953,10 @@ DL_EXPORT(void)
initmmap(void) initmmap(void)
{ {
PyObject *dict, *module; PyObject *dict, *module;
/* Patch the object type */
mmap_object_type.ob_type = &PyType_Type;
module = Py_InitModule ("mmap", mmap_functions); module = Py_InitModule ("mmap", mmap_functions);
dict = PyModule_GetDict (module); dict = PyModule_GetDict (module);
mmap_module_error = PyExc_EnvironmentError; mmap_module_error = PyExc_EnvironmentError;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment