diff -r de14cee4b93d -r 6c33d8f2601e jdk/src/share/classes/java/util/WeakHashMap.java --- a/jdk/src/share/classes/java/util/WeakHashMap.java Wed Jun 05 11:12:31 2013 +0100 +++ b/jdk/src/share/classes/java/util/WeakHashMap.java Fri May 31 10:53:19 2013 +0200 @@ -1100,9 +1100,10 @@ } else mc = expectedModCount; - if (tab.length >= hi && (i = index) >= 0 && i < hi) { - index = hi; + if (tab.length >= hi && (i = index) >= 0 && + (i < (index = hi) || current != null)) { WeakHashMap.Entry p = current; + current = null; // exhaust do { if (p == null) p = tab[i++]; @@ -1179,9 +1180,10 @@ } else mc = expectedModCount; - if (tab.length >= hi && (i = index) >= 0 && i < hi) { - index = hi; + if (tab.length >= hi && (i = index) >= 0 && + (i < (index = hi) || current != null)) { WeakHashMap.Entry p = current; + current = null; // exhaust do { if (p == null) p = tab[i++]; @@ -1256,9 +1258,10 @@ } else mc = expectedModCount; - if (tab.length >= hi && (i = index) >= 0 && i < hi) { - index = hi; + if (tab.length >= hi && (i = index) >= 0 && + (i < (index = hi) || current != null)) { WeakHashMap.Entry p = current; + current = null; // exhaust do { if (p == null) p = tab[i++];