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