This is an automated email from the ASF dual-hosted git repository. gnodet pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven-resolver.git
commit 99147f8789855ce2aa14f855f5d032522cce26e4 Author: Guillaume Nodet <[email protected]> AuthorDate: Sun Jun 7 06:46:34 2026 +0000 Fix IpcServer Lock memory leak — remove empty locks from map F-19: Remove Lock entries from the locks ConcurrentHashMap when holders and waiters are both empty after unlock, preventing unbounded accumulation over the server's lifetime. --- .../src/main/java/org/eclipse/aether/named/ipc/IpcServer.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/maven-resolver-named-locks-ipc/src/main/java/org/eclipse/aether/named/ipc/IpcServer.java b/maven-resolver-named-locks-ipc/src/main/java/org/eclipse/aether/named/ipc/IpcServer.java index 99e49a124..9f58fb7e2 100644 --- a/maven-resolver-named-locks-ipc/src/main/java/org/eclipse/aether/named/ipc/IpcServer.java +++ b/maven-resolver-named-locks-ipc/src/main/java/org/eclipse/aether/named/ipc/IpcServer.java @@ -461,6 +461,10 @@ public class IpcServer { } } } + + public synchronized boolean isEmpty() { + return (holders == null || holders.isEmpty()) && (waiters == null || waiters.isEmpty()); + } } class Context { @@ -486,7 +490,12 @@ public class IpcServer { public void unlock() { locks.stream() .map(k -> IpcServer.this.locks.computeIfAbsent(k, Lock::new)) - .forEach(l -> l.unlock(this)); + .forEach(l -> { + l.unlock(this); + if (l.isEmpty()) { + IpcServer.this.locks.remove(l.key, l); + } + }); } } }
