From ca2b06f57435c2f5ab6e207617e7e23adb5285cf Mon Sep 17 00:00:00 2001 From: nik Date: Tue, 24 Nov 2009 14:13:49 +0300 Subject: [PATCH] deadlock fixed --- .../util/descriptors/impl/ConfigFileImpl.java | 24 ++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/java/idea-ui/src/com/intellij/util/descriptors/impl/ConfigFileImpl.java b/java/idea-ui/src/com/intellij/util/descriptors/impl/ConfigFileImpl.java index 05a81ee2e5..e5ec38df5b 100644 --- a/java/idea-ui/src/com/intellij/util/descriptors/impl/ConfigFileImpl.java +++ b/java/idea-ui/src/com/intellij/util/descriptors/impl/ConfigFileImpl.java @@ -30,12 +30,15 @@ public class ConfigFileImpl implements ConfigFile { private final ConfigFileContainerImpl myContainer; private final Project myProject; private long myModificationCount; + private final Object myPsiFileLock = new Object(); private final VirtualFilePointerListener myListener = new VirtualFilePointerListener() { public void beforeValidityChanged(final VirtualFilePointer[] pointers) { } public void validityChanged(final VirtualFilePointer[] pointers) { - myPsiFile = null; + synchronized (myPsiFileLock) { + myPsiFile = null; + } onChange(); } }; @@ -73,17 +76,26 @@ public class ConfigFileImpl implements ConfigFile { } @Nullable - public synchronized PsiFile getPsiFile() { - if (myPsiFile != null && myPsiFile.isValid()) { - return myPsiFile; + public PsiFile getPsiFile() { + PsiFile psiFile; + synchronized (myPsiFileLock) { + psiFile = myPsiFile; + } + + if (psiFile != null && psiFile.isValid()) { + return psiFile; } VirtualFile virtualFile = getVirtualFile(); if (virtualFile == null || !virtualFile.isValid()) return null; - myPsiFile = PsiManager.getInstance(myProject).findFile(virtualFile); + psiFile = PsiManager.getInstance(myProject).findFile(virtualFile); + + synchronized (myPsiFileLock) { + myPsiFile = psiFile; + } - return myPsiFile; + return psiFile; } @Nullable -- 2.11.4.GIT