Issue 2112. mmap does not raises EnvironmentError no more, but
a subclass of it. Thanks John Lenton.
diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py
index 8a145cf..49ec78b 100644
--- a/Lib/test/test_mmap.py
+++ b/Lib/test/test_mmap.py
@@ -436,6 +436,11 @@
         self.assertRaises(TypeError, m.write, "foo")
 
 
+    def test_error(self):
+        self.assert_(issubclass(mmap.error, EnvironmentError))
+        self.assert_("mmap.error" in str(mmap.error))
+
+
 def test_main():
     run_unittest(MmapTests)
 
diff --git a/Misc/NEWS b/Misc/NEWS
index 377f1ed..a722195 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -1149,6 +1149,9 @@
 Extension Modules
 -----------------
 
+- #2112: mmap.error is now a subclass of EnvironmentError and not a
+  direct EnvironmentError
+
 - Bug #2111: mmap segfaults when trying to write a block opened with PROT_READ
 
 - #2063: correct order of utime and stime in os.times() result on Windows.
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c
index e47211f..c71d840 100644
--- a/Modules/mmapmodule.c
+++ b/Modules/mmapmodule.c
@@ -1402,7 +1402,10 @@
 	dict = PyModule_GetDict(module);
 	if (!dict)
 		return;
-	mmap_module_error = PyExc_EnvironmentError;
+	mmap_module_error = PyErr_NewException("mmap.error",
+		PyExc_EnvironmentError , NULL);
+	if (mmap_module_error == NULL)
+		return;
 	PyDict_SetItemString(dict, "error", mmap_module_error);
 	PyDict_SetItemString(dict, "mmap", (PyObject*) &mmap_object_type);
 #ifdef PROT_EXEC