From d2dc0a00c01a65da9e781573471cd15d8b447c4c Mon Sep 17 00:00:00 2001
From: pkupczyk <piotr.kupczyk@id.ethz.ch>
Date: Wed, 20 Dec 2023 09:15:19 +0100
Subject: [PATCH] SSDM-14263 : Deadlock on display settings

---
 .../cisd/openbis/generic/server/AbstractServer.java         | 6 ++++++
 .../server/api/v1/GeneralInformationChangingService.java    | 6 ++++++
 2 files changed, 12 insertions(+)

diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java
index cb5e1d90108..4e1e72471a3 100644
--- a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java
+++ b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java
@@ -621,6 +621,12 @@ public abstract class AbstractServer<T> extends AbstractServiceWithLogger<T> imp
 
         final Session session = sessionManager.getSession(sessionToken);
 
+        PersonPE attachedPerson = getDAOFactory().getPersonDAO().tryFindPersonByUserId(session.getUserName());
+        if(attachedPerson != null)
+        {
+            getDAOFactory().getPersonDAO().lock(attachedPerson);
+        }
+
         return displaySettingsProvider.executeActionWithPersonLock(session.getUserName(), new IDelegatedActionWithResult<SessionContextDTO>()
         {
             @Override public SessionContextDTO execute(final boolean didOperationSucceed)
diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationChangingService.java b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationChangingService.java
index c724f7d56b9..9226110c325 100644
--- a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationChangingService.java
+++ b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationChangingService.java
@@ -150,6 +150,12 @@ public class GeneralInformationChangingService extends
             final PersonPE person = session.tryGetPerson();
             if (person != null)
             {
+                PersonPE attachedPerson = getDAOFactory().getPersonDAO().tryFindPersonByUserId(person.getUserId());
+                if(attachedPerson != null)
+                {
+                    getDAOFactory().getPersonDAO().lock(attachedPerson);
+                }
+
                 displaySettingsProvider.executeActionWithPersonLock(person, new IDelegatedActionWithResult<Object>()
                 {
                     @Override public Object execute(final boolean didOperationSucceed)
-- 
GitLab