[ 
https://issues.apache.org/jira/browse/GROOVY-12565?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18134406#comment-18134406
 ] 

ASF GitHub Bot commented on GROOVY-12565:
-----------------------------------------

codeconsole opened a new pull request, #3094:
URL: https://github.com/apache/groovy/pull/3094

   `LspFixture` recorded notifications in a `Collections.synchronizedList` and 
plain lists. The server's debounced compile thread adds to them while a test 
iterates them, e.g. `publishedParams*.uri`, and the iterator of a synchronized 
list is not synchronized, so 
`GroovyLanguageServerTest.publishDiagnosticsIncludeVersionAndClearRemovedUris` 
failed on CI with a `ConcurrentModificationException` when the background 
compile published during that read. That still happened after 
`publishDiagnostics` was serialized. The recorded lists are now 
`CopyOnWriteArrayList`s, whose iterators read a snapshot.
   
   ## Tests
   
   `LspFixtureTest` reads `publishedParams` through an iterator taken before 
the compile thread publishes again, and fails without the change. The 345 
`groovy-lsp` tests pass, and the Checkstyle and CodeNarc gates pass.
   




> groovy-lsp LspFixture throws ConcurrentModificationException while the 
> compile thread publishes
> -----------------------------------------------------------------------------------------------
>
>                 Key: GROOVY-12565
>                 URL: https://issues.apache.org/jira/browse/GROOVY-12565
>             Project: Groovy
>          Issue Type: Test
>            Reporter: Scott Murphy Heiberg
>            Priority: Major
>
> {{LspFixture}} records the client notifications in a 
> {{Collections.synchronizedList}} and plain lists. The server's debounced 
> compile thread adds to them while a test iterates them, e.g. 
> {{publishedParams*.uri}}, and the iterator of a synchronized list is not 
> synchronized. 
> {{GroovyLanguageServerTest.publishDiagnosticsIncludeVersionAndClearRemovedUris}}
>  failed on CI with a ConcurrentModificationException when the background 
> compile published during that read, after the publishing itself was 
> serialized.
> Fix: record into {{CopyOnWriteArrayList}}s, whose iterators read a snapshot.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to