Browse Source

Issue #23838: linecache now clears the cache and returns an empty result on

MemoryError.
pull/224/head
Serhiy Storchaka 11 years ago
parent
commit
c512adc90d
  1. 6
      Lib/linecache.py
  2. 19
      Lib/test/test_linecache.py
  3. 3
      Misc/NEWS

6
Lib/linecache.py

@ -37,8 +37,12 @@ def getlines(filename, module_globals=None):
if filename in cache:
return cache[filename][2]
else:
try:
return updatecache(filename, module_globals)
except MemoryError:
clearcache()
return []
def checkcache(filename=None):

19
Lib/test/test_linecache.py

@ -126,8 +126,21 @@ class LineCacheTests(unittest.TestCase):
self.assertEqual(line, getline(source_name, index + 1))
source_list.append(line)
def test_main():
support.run_unittest(LineCacheTests)
def test_memoryerror(self):
lines = linecache.getlines(FILENAME)
self.assertTrue(lines)
def raise_memoryerror(*args, **kwargs):
raise MemoryError
with support.swap_attr(linecache, 'updatecache', raise_memoryerror):
lines2 = linecache.getlines(FILENAME)
self.assertEqual(lines2, lines)
linecache.clearcache()
with support.swap_attr(linecache, 'updatecache', raise_memoryerror):
lines3 = linecache.getlines(FILENAME)
self.assertEqual(lines3, [])
self.assertEqual(linecache.getlines(FILENAME), lines)
if __name__ == "__main__":
test_main()
unittest.main()

3
Misc/NEWS

@ -21,6 +21,9 @@ Core and Builtins
Library
-------
- Issue #23838: linecache now clears the cache and returns an empty result on
MemoryError.
- Issue #18473: Fixed 2to3 and 3to2 compatible pickle mappings. Fixed
ambigious reverse mappings. Added many new mappings. Import mapping is no
longer applied to modules already mapped with full name mapping.

Loading…
Cancel
Save