Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
ISISComputingGroup/IBEX#7470
The error in the ticket looks to be caused by non thread-safe access.
var count = getChannelCount()
for(int i=0; i<count; ++i) {
channels = <new smaller list>
getChannel(i)
(boom)I've refactored it to use thread-safe iterators over
CopyOnWriteArrayList
in one case, and iterators over an explicit copy of anArrayList
in another similar case. Both of these approaches should be thread-safe against the scenario described above, which looks to be the only possible cause of the stack trace seen in the ticket.Unfortunately I wasn't able to find a way to reliably reproduce the original issue in order to write tests for it. My attempt to reproduce was:
for
loop above)for
loop when the channels get changed over.However this workflow didn't seem to be able to reproduce the exact error in the ticket.
To test:
.zip
s fromisis_css_top\cs-studio\product\repository\target\products
toEPICS\ICP_Binaries\css
setup_css.bat
inEPICS\css\master