8000 ConcurrentModificationException in NioClient.processReadyKeys() due to concurrent selector modifications · Issue #379 · dnsjava/dnsjava · GitHub
[go: up one dir, main page]

Skip to content
ConcurrentModificationException in NioClient.processReadyKeys() due to concurrent selector modifications #379
Closed
@bhaveshthakker

Description

@bhaveshthakker

The NioClient.processReadyKeys() method is vulnerable to a java.util.ConcurrentModificationException. This occurs when another thread modifies the selector.selectedKeys() set while processReadyKeys() is iterating over it. This can happen when new channels are registered with the selector while processReadyKeys() is in progress.

Steps to Reproduce:

Create a scenario where new channels are registered with the selector while processReadyKeys() is running.
Ensure that the KeyProcessor takes some time to execute.
Trigger a high load of DNS requests.
A test case can be provided to reproduce the issue.

Expected Behavior:

The processReadyKeys() method should handle concurrent modifications to the selector.selectedKeys() set gracefully, without throwing a ConcurrentModificationException.

Exception in thread "dnsjava NIO selector" java.util.ConcurrentModificationException
at java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1626)
at java.base/java.util.HashMap$KeyIterator.next(HashMap.java:1654)
at org.xbill.DNS.NioClient.processReadyKeys(NioClient.java:175)
at org.xbill.DNS.NioClient.runSelector(NioClient.java:130)
at java.base/java.lang.Thread.run(Thread.java:1520)

Actual Behavior:

The processReadyKeys() method throws a java.util.ConcurrentModificationException when another thread modifies the selector.selectedKeys() set during iteration.

Proposed Solution:

The recommended solution is to collect the keys to be removed in a separate collection (e.g., an ArrayList) and then remove them from the selector.selectedKeys() set after the iteration is complete.

Additional Context:

This issue can be difficult to reproduce because it depends on specific timing and concurrency conditions. However, it can cause instability and unexpected behavior in applications under load.

Impact:

This issue can cause application crashes and instability.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions

    0