Issue #23838: linecache now clears the cache and returns an empty result on
MemoryError.
This commit is contained in:
parent
263dcd20a3
commit
c512adc90d
|
@ -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):
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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…
Reference in New Issue