I submitted a CR for this issue at:
The field timedOutItems (an ArrayList, i.e., not thread safe):
is protected by synchronization on itself (timedOutItems):
However, in one place:
it is (trying to be) protected by synchronized using pendingReconstructions — but this cannot protect timedOutItems.
Synchronized on different objects does not ensure mutual exclusion with the other locations.
I.e., 2 code locations, one synchronized by pendingReconstructions and the other by timedOutItems can still executed concurrently.
This CR adds the synchronized on timedOutItems.
Note that this CR keeps the synchronized on pendingReconstructions, which is needed for a different purpose (protect pendingReconstructions)