From 4eb2a7599e8f07fcf98891853c709a5063630a2a Mon Sep 17 00:00:00 2001 From: Konstantin Kolosovsky Date: Tue, 19 Jun 2018 18:54:16 +0300 Subject: [PATCH] svn: Remove unnecessary locks in "RootsToWorkingCopies" This also fixes the following deadlock in tests: * "addRoot()" method executes task synchronously in tests and calls "Application.invokeAndWait()" in the end to run task callbacks in EDT - see "CoreProgressManager.runProcessWithProgressInCurrentThread()" * "getWcRoot()" method is called in EDT in tests and tries to get "myLock" Prior to this commit "addRoot()" was called under "myLock" which caused deadlock with "getWcRoot()" --- .../jetbrains/idea/svn/RootsToWorkingCopies.kt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/RootsToWorkingCopies.kt b/plugins/svn4idea/src/org/jetbrains/idea/svn/RootsToWorkingCopies.kt index dafec636ba74..c24c32885ce4 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/RootsToWorkingCopies.kt +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/RootsToWorkingCopies.kt @@ -25,12 +25,10 @@ class RootsToWorkingCopies(private val myVcs: SvnVcs) : VcsListener { private val myQueue = BackgroundTaskQueue(myProject, "SVN VCS roots authorization checker") private val myZipperUpdater = ZipperUpdater(200, Alarm.ThreadToUse.POOLED_THREAD, myProject) private val myRechecker = Runnable { + clear() val roots = ProjectLevelVcsManager.getInstance(myProject).getRootsUnderVcs(myVcs) - synchronized(myLock) { - clear() - for (root in roots) { - addRoot(root) - } + for (root in roots) { + addRoot(root) } } @@ -100,9 +98,11 @@ class RootsToWorkingCopies(private val myVcs: SvnVcs) : VcsListener { return resolvedWorkingCopy } - fun clear() = synchronized(myLock) { - myRootMapping.clear() - myUnversioned.clear() + fun clear() { + synchronized(myLock) { + myRootMapping.clear() + myUnversioned.clear() + } myZipperUpdater.stop() }