Skip to content

Commit 6fbe03b

Browse files
committed
Don't use Display.syncExec() for refresh in RuntimeClasspathViewer
The listener may be called from a background thread that already holds some locks. To refresh RuntimeClasspathViewer UI in the current case, syncExec is not needed, asyncExec is enough and it would not acquire the UI lock from an unknown thread. Fixes #672
1 parent 093343f commit 6fbe03b

1 file changed

Lines changed: 4 additions & 8 deletions

File tree

org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/classpath/RuntimeClasspathViewer.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import org.eclipse.swt.events.KeyAdapter;
4444
import org.eclipse.swt.events.KeyEvent;
4545
import org.eclipse.swt.widgets.Composite;
46+
import org.eclipse.swt.widgets.Display;
4647
import org.eclipse.swt.widgets.Shell;
4748
import org.eclipse.ui.dialogs.FilteredTree;
4849
import org.eclipse.ui.dialogs.PatternFilter;
@@ -64,17 +65,12 @@ public class RuntimeClasspathViewer implements IClasspathViewer {
6465

6566
@Override
6667
public void preferenceChange(PreferenceChangeEvent event) {
67-
if (DebugUIPlugin.getStandardDisplay().getThread().equals(Thread.currentThread())) {
68+
Display display = DebugUIPlugin.getStandardDisplay();
69+
if (display.getThread().equals(Thread.currentThread())) {
6870
refresh(true);
6971
} else {
70-
DebugUIPlugin.getStandardDisplay().syncExec(new Runnable() {
71-
@Override
72-
public void run() {
73-
refresh(true);
74-
}
75-
});
72+
display.asyncExec(() -> refresh(true));
7673
}
77-
7874
}
7975
};
8076

0 commit comments

Comments
 (0)