HADOOP-11221. IdentityHashStore assumes System.identityHashCode() is non-negative. Contributed by Jinghui Wang

This commit is contained in:
Tsz-Wo Nicholas Sze 2014-10-30 10:58:26 -07:00
parent b2a7bbf4f6
commit c3de2fc1eb
2 changed files with 11 additions and 6 deletions

View File

@ -658,6 +658,9 @@ Release 2.6.0 - UNRELEASED
HADOOP-11250. fix endmacro of set_find_shared_library_without_version in
CMakeLists (Yi Liu via Colin P. McCabe)
HADOOP-11221. IdentityHashStore assumes System.identityHashCode() is
non-negative. (Jinghui Wang via szetszwo)
Release 2.5.1 - 2014-09-05
INCOMPATIBLE CHANGES

View File

@ -92,9 +92,10 @@ public final class IdentityHashStore<K, V> {
}
private void putInternal(Object k, Object v) {
int hash = System.identityHashCode(k);
final int numEntries = buffer.length / 2;
int index = hash % numEntries;
final int hash = System.identityHashCode(k);
final int numEntries = buffer.length >> 1;
//computing modulo with the assumption buffer.length is power of 2
int index = hash & (numEntries-1);
while (true) {
if (buffer[2 * index] == null) {
buffer[2 * index] = k;
@ -127,9 +128,10 @@ public final class IdentityHashStore<K, V> {
if (buffer == null) {
return -1;
}
final int numEntries = buffer.length / 2;
int hash = System.identityHashCode(k);
int index = hash % numEntries;
final int numEntries = buffer.length >> 1;
final int hash = System.identityHashCode(k);
//computing modulo with the assumption buffer.length is power of 2
int index = hash & (numEntries -1);
int firstIndex = index;
do {
if (buffer[2 * index] == k) {