Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Changes ISOServer channels map implementation to ConcurrentHashMap #539

Open
wants to merge 1 commit into
base: tail
Choose a base branch
from

Conversation

agustiza
Copy link

@agustiza agustiza commented May 9, 2023

Should fix #508 by using a ConcurrentHashMap. Also refactored dump a bit. Functionally it is exactly the same.

About the issue ConcurrentHashMap has weak consistency guarantees but will handle mid iteration insertions transparently. Could still potentially dump inconsistent data if an insertion happens mid iteration as in there's no guarantee the iterator is actually updated with new entries but it's a tradeoff.

The alternative would be to lock any access to the map but seems overkill for a SystemMonitor dump and would probably perform worse as we would have to lock on get() which ConcurrentHashMap tries to avoid. Collections.synchronizedMap() does not solve this issue either.

On another note, to be honest I couldn't find where exactly someone might put a channel mid iteration. ISOServer seems to only support a single channel at a time.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

ISOServer.dump ConcurrentModificationException
1 participant