diff options
author | Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp> | 2009-03-05 14:33:01 (GMT) |
---|---|---|
committer | Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp> | 2009-03-05 14:33:01 (GMT) |
commit | 8e722bcf85641d0519f39c9ca31348c3b7a1d12e (patch) | |
tree | 2f0199db9959ff4be8565246d4d7c82cd75e3849 /Modules/mmapmodule.c | |
parent | 9a8082f107d3fd3599c2f21a130413030e3d4cfe (diff) | |
download | cpython-8e722bcf85641d0519f39c9ca31348c3b7a1d12e.zip cpython-8e722bcf85641d0519f39c9ca31348c3b7a1d12e.tar.gz cpython-8e722bcf85641d0519f39c9ca31348c3b7a1d12e.tar.bz2 |
Merged revisions 70189 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r70189 | hirokazu.yamamoto | 2009-03-05 23:21:12 +0900 | 4 lines
Issue #5385: Fixed mmap crash after resize failure on windows.
Now uses NULL instead of INVALID_HANDLE_VALUE as invalid map handle
because CreateFileMapping returns NULL when error occurs.
........
Diffstat (limited to 'Modules/mmapmodule.c')
-rw-r--r-- | Modules/mmapmodule.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index d214b62..45da96f 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -113,7 +113,7 @@ mmap_object_dealloc(mmap_object *m_obj) #ifdef MS_WINDOWS if (m_obj->data != NULL) UnmapViewOfFile (m_obj->data); - if (m_obj->map_handle != INVALID_HANDLE_VALUE) + if (m_obj->map_handle != NULL) CloseHandle (m_obj->map_handle); if (m_obj->file_handle != INVALID_HANDLE_VALUE) CloseHandle (m_obj->file_handle); @@ -153,9 +153,9 @@ mmap_close_method(mmap_object *self, PyObject *unused) UnmapViewOfFile(self->data); self->data = NULL; } - if (self->map_handle != INVALID_HANDLE_VALUE) { + if (self->map_handle != NULL) { CloseHandle(self->map_handle); - self->map_handle = INVALID_HANDLE_VALUE; + self->map_handle = NULL; } if (self->file_handle != INVALID_HANDLE_VALUE) { CloseHandle(self->file_handle); @@ -179,7 +179,7 @@ mmap_close_method(mmap_object *self, PyObject *unused) #ifdef MS_WINDOWS #define CHECK_VALID(err) \ do { \ - if (self->map_handle == INVALID_HANDLE_VALUE) { \ + if (self->map_handle == NULL) { \ PyErr_SetString(PyExc_ValueError, "mmap closed or invalid"); \ return err; \ } \ @@ -452,8 +452,10 @@ mmap_resize_method(mmap_object *self, DWORD off_hi, off_lo, newSizeLow, newSizeHigh; /* First, unmap the file view */ UnmapViewOfFile(self->data); + self->data = NULL; /* Close the mapping object */ CloseHandle(self->map_handle); + self->map_handle = NULL; /* Move to the desired EOF position */ #if SIZEOF_SIZE_T > 4 newSizeHigh = (DWORD)((self->offset + new_size) >> 32); @@ -490,6 +492,8 @@ mmap_resize_method(mmap_object *self, return Py_None; } else { dwErrCode = GetLastError(); + CloseHandle(self->map_handle); + self->map_handle = NULL; } } else { dwErrCode = GetLastError(); @@ -1202,7 +1206,7 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) destruct the object in the face of failure */ m_obj->data = NULL; m_obj->file_handle = INVALID_HANDLE_VALUE; - m_obj->map_handle = INVALID_HANDLE_VALUE; + m_obj->map_handle = NULL; m_obj->tagname = NULL; m_obj->offset = offset; @@ -1300,8 +1304,11 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) m_obj->size); if (m_obj->data != NULL) return (PyObject *)m_obj; - else + else { dwErr = GetLastError(); + CloseHandle(m_obj->map_handle); + m_obj->map_handle = NULL; + } } else dwErr = GetLastError(); Py_DECREF(m_obj); |