]> granicus.if.org Git - python/commitdiff
Issue #25582: Fixed 100 MB memory leak in test_ctypes.
authorSerhiy Storchaka <storchaka@gmail.com>
Mon, 9 Nov 2015 20:31:10 +0000 (22:31 +0200)
committerSerhiy Storchaka <storchaka@gmail.com>
Mon, 9 Nov 2015 20:31:10 +0000 (22:31 +0200)
Lib/ctypes/test/test_pointers.py
Lib/ctypes/test/test_win32.py

index 5cdde6813ec9677e8a684fd801747648d7636828..6915cda2bd1e156f475f79b2f11d3a590060af9f 100644 (file)
@@ -192,9 +192,19 @@ class PointersTestCase(unittest.TestCase):
         LargeNamedType = type('T' * 2 ** 25, (Structure,), {})
         self.assertTrue(POINTER(LargeNamedType))
 
+        # to not leak references, we must clean _pointer_type_cache
+        from ctypes import _pointer_type_cache
+        del _pointer_type_cache[LargeNamedType]
+
     def test_pointer_type_str_name(self):
         large_string = 'T' * 2 ** 25
-        self.assertTrue(POINTER(large_string))
+        P = POINTER(large_string)
+        self.assertTrue(P)
+
+        # to not leak references, we must clean _pointer_type_cache
+        from ctypes import _pointer_type_cache
+        del _pointer_type_cache[id(P)]
+
 
 if __name__ == '__main__':
     unittest.main()
index ff083862ccf544cdf084758fe1222bf15ac99e4f..d22e139a3f9782bf440ec4aa0a3e1b5c7a9aa4ba 100644 (file)
@@ -114,5 +114,9 @@ class Structures(unittest.TestCase):
             self.assertEqual(ret.top, top.value)
             self.assertEqual(ret.bottom, bottom.value)
 
+        # to not leak references, we must clean _pointer_type_cache
+        from ctypes import _pointer_type_cache
+        del _pointer_type_cache[RECT]
+
 if __name__ == '__main__':
     unittest.main()