summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortompng (tomoya ishida) <[email protected]>2021-04-11 19:04:31 +0900
committerNobuyoshi Nakada <[email protected]>2021-04-11 19:05:26 +0900
commit9f9045123efefbd11dd397b4d59596290765feec ()
tree7b7b4d76d96ca6be82e7c4d26eb3f5e161ea0d18
parent60bdf03b6d982777656acc11bdeb2ca4b4c3f1ef (diff)
st.c: skip all deleted entries [Bug #17779]
Update the start entry skipping all already deleted entries. Fixes performance issue of `Hash#first` in a certain case.
-rw-r--r--benchmark/hash_first.yml11
-rw-r--r--st.c9
2 files changed, 18 insertions, 2 deletions
@@ -0,0 +1,11 @@
@@ -1244,8 +1244,13 @@ update_range_for_deleted(st_table *tab, st_index_t n)
{
/* Do not update entries_bound here. Otherwise, we can fill all
bins by deleted entry value before rebuilding the table. */
- if (tab->entries_start == n)
- tab->entries_start = n + 1;
}
/* Delete entry with KEY from table TAB, set up *VALUE (unless