From e604c02a803f075efecb318f5fb584faf7bf12c4 Mon Sep 17 00:00:00 2001 From: Neal Norwitz Date: Fri, 10 Jan 2003 20:52:16 +0000 Subject: [PATCH] SF #665913, Fix mmap module core dump with unix Closing an mmap'ed file (calling munmap) twice on Solaris caused a core dump. Will backport. --- Lib/test/test_mmap.py | 18 ++++++++++++++++++ Modules/mmapmodule.c | 6 ++++-- 2 files changed, 22 insertions(+), 2 deletions(-) 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);