Merged revisions 85392 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r85392 | benjamin.peterson | 2010-10-12 17:57:59 -0500 (Tue, 12 Oct 2010) | 1 line

  prefer clearing global objects to obscure module.__dict__ bugs #10068
........
diff --git a/Lib/test/test_module.py b/Lib/test/test_module.py
index 638f55b..5605e3c 100644
--- a/Lib/test/test_module.py
+++ b/Lib/test/test_module.py
@@ -1,6 +1,6 @@
 # Test the module type
 import unittest
-from test.test_support import run_unittest
+from test.test_support import run_unittest, gc_collect
 
 import sys
 ModuleType = type(sys)
@@ -55,14 +55,29 @@
               {"__name__": "foo", "__doc__": "foodoc", "bar": 42})
         self.assertTrue(foo.__dict__ is d)
 
+    @unittest.expectedFailure
     def test_dont_clear_dict(self):
         # See issue 7140.
         def f():
             foo = ModuleType("foo")
             foo.bar = 4
             return foo
+        gc_collect()
         self.assertEqual(f().__dict__["bar"], 4)
 
+    def test_clear_dict_in_ref_cycle(self):
+        destroyed = []
+        m = ModuleType("foo")
+        m.destroyed = destroyed
+        s = """class A:
+    def __del__(self):
+        destroyed.append(1)
+a = A()"""
+        exec(s, m.__dict__)
+        del m
+        gc_collect()
+        self.assertEqual(destroyed, [1])
+
 def test_main():
     run_unittest(ModuleTests)