From cad49082d247bdc6c54badc8ca529895c573d25b Mon Sep 17 00:00:00 2001
From: Thomas Mortagne <thomas.mortagne@gmail.com>
Date: Fri, 7 Jun 2024 11:30:22 +0200
Subject: [PATCH] XWIKI-22215: XWikiDocument#getPreparedXDOM can run the
 preparation on the same XDOM instance in several threads

(cherry picked from commit 954c5107dbab28655a060c71412f024da367d1e0)
---
 .../src/main/java/com/xpn/xwiki/doc/XWikiDocument.java       | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/doc/XWikiDocument.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/doc/XWikiDocument.java
index 4aa31ef81cd..b5034f3fc10 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/doc/XWikiDocument.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/doc/XWikiDocument.java
@@ -8995,6 +8995,9 @@ public XDOM getPreparedXDOM()
         // Parse the content if not already done
         if (xdom == null) {
             xdom = parseContentNoException();
+        } else {
+            // Clone the XDOM to avoid concurrent modifications during the preparation
+            xdom = xdom.clone();
         }
 
         // Prepare the content
@@ -9005,7 +9008,7 @@ public XDOM getPreparedXDOM()
         this.xdomCache = xdom;
         this.xdomCachePrepareDate = xdomPrepareDate;
 
-        return xdom.clone();
+        return this.xdomCache.clone();
     }
 
     private void resetXDOM()
-- 
GitLab