Index: luni/src/main/java/java/util/Hashtable.java =================================================================== --- luni/src/main/java/java/util/Hashtable.java (revision 478105) +++ luni/src/main/java/java/util/Hashtable.java (working copy) @@ -439,33 +439,39 @@ return new Collections.SynchronizedSet>(new AbstractSet>() { @Override public int size() { - return elementCount; + synchronized (Hashtable.this) { + return elementCount; + } } @Override public void clear() { - Hashtable.this.clear(); + Hashtable.this.clear(); } @Override @SuppressWarnings("unchecked") public boolean remove(Object object) { - if (contains(object)) { - Hashtable.this.remove(((Map.Entry)object).getKey()); - return true; - } - return false; + synchronized (Hashtable.this) { + if (contains(object)) { + Hashtable.this.remove(((Map.Entry)object).getKey()); + return true; + } + return false; + } } @Override @SuppressWarnings("unchecked") public boolean contains(Object object) { - Entry entry = getEntry(((Map.Entry)object).getKey()); - return object.equals(entry); + synchronized (Hashtable.this) { + Entry entry = getEntry(((Map.Entry)object).getKey()); + return object.equals(entry); + } } @Override - public Iterator> iterator() { + public Iterator> iterator() { return new HashIterator>(new MapEntry.Type, K, V>() { public Map.Entry get(MapEntry entry) { return entry; @@ -614,26 +620,32 @@ new AbstractSet() { @Override public boolean contains(Object object) { - return containsKey(object); + synchronized (Hashtable.this) { + return containsKey(object); + } } @Override public int size() { - return elementCount; + synchronized (Hashtable.this) { + return elementCount; + } } @Override public void clear() { - Hashtable.this.clear(); + Hashtable.this.clear(); } @Override public boolean remove(Object key) { - if (containsKey(key)) { - Hashtable.this.remove(key); - return true; - } - return false; + synchronized (Hashtable.this) { + if (containsKey(key)) { + Hashtable.this.remove(key); + return true; + } + return false; + } } @Override @@ -843,17 +855,21 @@ return new Collections.SynchronizedCollection(new AbstractCollection() { @Override public boolean contains(Object object) { - return Hashtable.this.contains(object); + synchronized (Hashtable.this) { + return Hashtable.this.contains(object); + } } @Override public int size() { - return elementCount; + synchronized (Hashtable.this) { + return elementCount; + } } @Override public void clear() { - Hashtable.this.clear(); + Hashtable.this.clear(); } @Override