diff --git a/src/main/java/org/olat/course/nodes/iq/IQEditController.java b/src/main/java/org/olat/course/nodes/iq/IQEditController.java index 6e364031f83fb9cb8fe1871642e9601972c07216..5761818573f415df33bf735335c048825c479e6f 100644 --- a/src/main/java/org/olat/course/nodes/iq/IQEditController.java +++ b/src/main/java/org/olat/course/nodes/iq/IQEditController.java @@ -59,6 +59,7 @@ import org.olat.core.logging.AssertException; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.util.coordinate.CoordinatorManager; +import org.olat.core.util.coordinate.LockResult; import org.olat.core.util.vfs.LocalFileImpl; import org.olat.core.util.vfs.LocalFolderImpl; import org.olat.core.util.vfs.VFSConstants; @@ -99,6 +100,7 @@ import org.olat.repository.controllers.ReferencableEntriesSearchController; import org.olat.repository.handlers.RepositoryHandler; import org.olat.repository.handlers.RepositoryHandlerFactory; import org.olat.resource.OLATResource; +import org.olat.user.UserManager; import de.bps.onyx.plugin.OnyxModule; import de.bps.onyx.plugin.course.nodes.iq.IQEditForm; @@ -721,8 +723,14 @@ public class IQEditController extends ActivateableTabbableDefaultController impl private void doIQReference(UserRequest urequest, RepositoryEntry re) { // repository search controller done if (re != null) { - if (CoordinatorManager.getInstance().getCoordinator().getLocker().isLocked(re.getOlatResource(), null)) { - showError("error.entry.locked"); + if (CoordinatorManager.getInstance().getCoordinator().getLocker().isLocked(re.getOlatResource(), null)) { + LockResult lockResult = CoordinatorManager.getInstance().getCoordinator().getLocker().acquireLock(re.getOlatResource(), urequest.getIdentity(), null); + String fullName = CoreSpringFactory.getImpl(UserManager.class).getUserDisplayName(lockResult.getOwner()); + showError("error.entry.locked", fullName); + if(lockResult.isSuccess()) { + //improbable concurrency security + CoordinatorManager.getInstance().getCoordinator().getLocker().releaseLock(lockResult); + } } else { if(editTestButton != null) { myContent.remove(editTestButton);