Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b63902a

Browse files
Issue #25582: Fixed 100 MB memory leak in test_ctypes.
1 parent ba27014 commit b63902a

2 files changed

Lines changed: 15 additions & 1 deletion

File tree

Lib/ctypes/test/test_pointers.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,9 +192,19 @@ def test_pointer_type_name(self):
192192
LargeNamedType = type('T' * 2 ** 25, (Structure,), {})
193193
self.assertTrue(POINTER(LargeNamedType))
194194

195+
# to not leak references, we must clean _pointer_type_cache
196+
from ctypes import _pointer_type_cache
197+
del _pointer_type_cache[LargeNamedType]
198+
195199
def test_pointer_type_str_name(self):
196200
large_string = 'T' * 2 ** 25
197-
self.assertTrue(POINTER(large_string))
201+
P = POINTER(large_string)
202+
self.assertTrue(P)
203+
204+
# to not leak references, we must clean _pointer_type_cache
205+
from ctypes import _pointer_type_cache
206+
del _pointer_type_cache[id(P)]
207+
198208

199209
if __name__ == '__main__':
200210
unittest.main()

Lib/ctypes/test/test_win32.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,5 +135,9 @@ class RECT(Structure):
135135
self.assertEqual(ret.top, top.value)
136136
self.assertEqual(ret.bottom, bottom.value)
137137

138+
# to not leak references, we must clean _pointer_type_cache
139+
from ctypes import _pointer_type_cache
140+
del _pointer_type_cache[RECT]
141+
138142
if __name__ == '__main__':
139143
unittest.main()

0 commit comments

Comments
 (0)