From 98c87302c0faad3dfa3e33c6d74eec6c4ee16369 Mon Sep 17 00:00:00 2001
From: Valery Kharseko <vharseko@3a-systems.ru>
Date: Thu, 06 Aug 2026 07:54:34 +0000
Subject: [PATCH] Avoid global write lock on every delete in GroupManager (#682)

---
 opendj-server-legacy/src/main/java/org/opends/server/core/GroupManager.java |   17 +++++++++++++++++
 1 files changed, 17 insertions(+), 0 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/core/GroupManager.java b/opendj-server-legacy/src/main/java/org/opends/server/core/GroupManager.java
index 69ecd38..66aae56 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/core/GroupManager.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/core/GroupManager.java
@@ -678,6 +678,23 @@
       return;
     }
 
+    // Fast path: this hook runs for every delete, but almost no deleted
+    // entries have a group registered at or below them. Check with the read
+    // lock first instead of serializing all delete threads on the exclusive
+    // lock (same pattern as SubentryManager.doPostDelete).
+    lock.readLock().lock();
+    try
+    {
+      if (!groupInstances.containsSubtree(entry.getName()))
+      {
+        return;
+      }
+    }
+    finally
+    {
+      lock.readLock().unlock();
+    }
+
     lock.writeLock().lock();
     try
     {

--
Gitblit v1.10.0