RFR: 8048209 : (s) Collections.synchronizedNavigableSet().tailSet(Object, boolean) synchronizes on wrong object
Paul Sandoz
paul.sandoz at oracle.com
Thu Jul 24 13:59:58 UTC 2014
On Jul 24, 2014, at 12:12 AM, Mike Duigou <mike.duigou at oracle.com> wrote:
> Hello all;
>
> This change fixes an issue with the instance returned by Collections.synchronizedNavigableSet().tailSet(Object,boolean) which synchronizes on wrong object, itself rather than the same mutex as it's source.
>
> jbsbug: https://bugs.openjdk.java.net/browse/JDK-8048209
> webrev: http://cr.openjdk.java.net/~mduigou/JDK-8048209/0/webrev/
>
> Since I was concerned that there might be other lurking errors I opted to create a fairly thorough new test which, thankfully, revealed no additional problems.
>
Looks good, i like the test re-structuring, just some minor comments on that.
- there are some commented out asserts.
- take or leave the following... the providers could be simplified a little if you return a Stream rather than a Collection for those make methods:
Supplier<..> s = () -> Collections.synchronizedSortedSet(new TreeSet<>(BASE_COLLECTION));
Stream.of(s.get(),
s.get().headSet("Foxtrot"),
...)
map(c -> new Object[] {c})
and also use Stream.concat.
Paul.
More information about the core-libs-dev
mailing list