aboutsummaryrefslogtreecommitdiffstats
path: root/st.c
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-01-16 22:38:05 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-01-16 22:38:05 +0000
commit84f204046b64feb38873845612b8177c663b7960 (patch)
tree7a8a86facfa480e081ee8af323820ff3ea7007b7 /st.c
parentde1e4881d4c29e71086e9885c7f1a48452aa6780 (diff)
downloadruby-84f204046b64feb38873845612b8177c663b7960.tar.gz
* st.c (unpack_entries): Fix r34310: on unpacking, the position of
a hash must be do_hash-ed value. * st.c (add_packed_direct): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34319 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'st.c')
-rw-r--r--st.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/st.c b/st.c
index 48fe565993..4252e1c350 100644
--- a/st.c
+++ b/st.c
@@ -462,7 +462,7 @@ unpack_entries(register st_table *table)
tmp_table.num_entries = 0;
memset(tmp_table.bins, 0, sizeof(struct st_table_entry *) * tmp_table.num_bins);
for (i = 0; i < table->num_entries; i++) {
- st_index_t hash_val = PKEY(table, i); /* do_hash(PKEY(table, i), &tmp_table); */
+ st_index_t hash_val = do_hash(PKEY(table, i), &tmp_table);
add_direct(&tmp_table, PKEY(table, i), PVAL(table, i),
hash_val, hash_val % tmp_table.num_bins);
}
@@ -478,8 +478,9 @@ add_packed_direct(st_table *table, st_data_t key, st_data_t value)
PVAL_SET(table, i, value);
}
else {
+ st_index_t hash_val = do_hash(key, table);
unpack_entries(table);
- add_direct(table, key, value, key, key % table->num_bins);
+ add_direct(table, key, value, hash_val, hash_val % table->num_bins);
}
}