-
Notifications
You must be signed in to change notification settings - Fork 1.9k
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
Improve ConcurrentPool concurrency #12289
Comments
sbordet
added
the
Sponsored
This issue affects a user with a commercial support agreement
label
Sep 18, 2024
sbordet
changed the title
Improve ConcurrentPool reserve()/remove() concurrency
Improve ConcurrentPool concurrency
Sep 18, 2024
sbordet
added a commit
that referenced
this issue
Sep 18, 2024
A call to `sweep()`, although protected by the lock for concurrent calls to `reserve()`, may be concurrent with `remove(Entry)`. `remove(Entry)` in turn calls `entries.remove(Object)`, so that the concurrent iteration in `sweep()` over `entries` fails with an `ArrayIndexOutOfBoundsException`. Now using the bulk `entries.removeIf(Predicate)` method in `sweep()`, so that sweeping is atomic with respect to `entries.remove(Object)`. Signed-off-by: Simone Bordet <[email protected]>
sbordet
added a commit
that referenced
this issue
Sep 20, 2024
A call to `sweep()`, although protected by the lock for concurrent calls to `reserve()`, may be concurrent with `remove(Entry)`. `remove(Entry)` in turn calls `entries.remove(Object)`, so that the concurrent iteration in `sweep()` over `entries` fails with an `ArrayIndexOutOfBoundsException`. Now using the bulk `entries.removeIf(Predicate)` method in `sweep()`, so that sweeping is atomic with respect to `entries.remove(Object)`. Fixed other occurrences of manual iteration over CopyOnWriteArrayList that may be concurrent with removals. Signed-off-by: Simone Bordet <[email protected]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Jetty version(s)
12
Description
The text was updated successfully, but these errors were encountered: