RFR: 8232853: AuthenticationFilter.Cache::remove may throw ConcurrentModificationException

Alan Bateman Alan.Bateman at oracle.com
Tue Nov 5 09:14:51 UTC 2019


On 04/11/2019 15:09, Daniel Fuchs wrote:
> :
>
>> It looks like Cache#remove can be fixed simply by using an explicit 
>> iterator and using iterator#remove instead of List#remove.
>
> Yes - we could have used an Iterator. I don't like much LinkedList.
> We could have used ArrayList and an explicit Iterator instead.
> I suggested using  CopyOnWriteArrayList just to avoid using the
> Iterator explicitly. Cache are usually few writes and multiple
> reads so that looked appropriate.
>
> Would you still advised using plain ArrayList and an Iterator instead?
I think I agree Martin in that it looks strange to use COWAL for the 
entries when all methods are synchronized. What are the access patterns 
on a Cache instance? I assume mostly get methods, in which case allowing 
concurrent access may be benefical. If there are a lot of calls to 
remove then changing it ArrayList could be O(n) due to the shifting. 
Maybe the simplest is to fix the issue at end by using the 
Iterator::remove and then re-visit the Cache implementation later (you 
mentioned other auth schemes so I assume it will need to be re-visited 
at some point anyway).

-Alan.


More information about the net-dev mailing list