Author: Armin Rigo <ar...@tunes.org> Branch: rpython-hash Changeset: r89787:9a1928019d6b Date: 2017-01-26 14:54 +0100 http://bitbucket.org/pypy/pypy/changeset/9a1928019d6b/
Log: Fix test_memoryerror by using the most tight estimate in ll_dict_create_index. This value should have the same guarantee in real program: if we get out of memory inserting a new item, then the recreated index is still of the smaller size instead of being bigger (and then likely not fitting in memory either) diff --git a/rpython/rtyper/lltypesystem/rordereddict.py b/rpython/rtyper/lltypesystem/rordereddict.py --- a/rpython/rtyper/lltypesystem/rordereddict.py +++ b/rpython/rtyper/lltypesystem/rordereddict.py @@ -879,9 +879,15 @@ if d.num_live_items == 0: new_size = DICT_INITSIZE # fast path else: - new_estimate = d.num_live_items * 2 + # Use a more conservative estimate than _ll_dict_resize_to() here. + # This function is called when initially creating the index (so, + # for prebuilt dicts, the chance is that it will never grow); + # after we got a MemoryError; and when throwing the index away + # because of heavy shrinking of the dict. The minimum value + # here is such that 'new_estimate * 2 - num_live_items * 3 > 0'. + new_estimate = (d.num_live_items * 3) // 2 + 1 new_size = DICT_INITSIZE - while new_size <= new_estimate: + while new_size < new_estimate: new_size *= 2 ll_dict_reindex(d, new_size) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit