diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py index 417080f0055..69d3cd5311f 100644 --- a/Lib/test/test_mmap.py +++ b/Lib/test/test_mmap.py @@ -297,6 +297,24 @@ def test_both(): except OSError: pass + # make sure a double close doesn't crash on Solaris (Bug# 665913) + f = open(TESTFN, 'w+') + + try: # unlink TESTFN no matter what + f.write(2**24 * 'a') # Arbitrary character + f.close() + + f = open(TESTFN) + mf = mmap.mmap(f.fileno(), 2**24, access=mmap.ACCESS_READ) + mf.close() + mf.close() + f.close() + + finally: + try: + os.unlink(TESTFN) + except OSError: + pass print ' Test passed' diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index cff3c146e6c..f1df4dcab28 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -141,8 +141,10 @@ mmap_close_method(mmap_object *self, PyObject *args) #endif /* MS_WINDOWS */ #ifdef UNIX - munmap(self->data, self->size); - self->data = NULL; + if (self->data != NULL) { + munmap(self->data, self->size); + self->data = NULL; + } #endif Py_INCREF (Py_None);