mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
[threading] RUBY-34098: Terminate processes on EDT
For an unknown reason, process termination requires write-intent read action. Previously the write-intent lock was acquired on a background thread, which interfered with active modal progresses. Now we dispatch process termination to EDT. We hope that process termination does not require write action (cherry picked from commit be5b8bc9e69b97b957ee9a1fd3ef8fa8e85d0ddf) IJ-CR-165004 GitOrigin-RevId: b3182bb3682141e81775306130f540af449dd5e3
This commit is contained in:
committed by
intellij-monorepo-bot
parent
0d5e6eba2f
commit
439bcb33ad
@@ -19,6 +19,7 @@ import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.actionSystem.ex.CustomComponentAction;
|
||||
import com.intellij.openapi.actionSystem.impl.ActionButton;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ModalityState;
|
||||
import com.intellij.openapi.application.WriteIntentReadAction;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
@@ -45,6 +46,7 @@ import com.intellij.ui.components.panels.NonOpaquePanel;
|
||||
import com.intellij.util.Alarm;
|
||||
import com.intellij.util.ArrayUtilRt;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.ui.EDT;
|
||||
import com.intellij.util.ui.JBEmptyBorder;
|
||||
import com.intellij.util.ui.accessibility.AccessibleContextUtil;
|
||||
import com.intellij.util.ui.accessibility.ScreenReader;
|
||||
@@ -439,7 +441,14 @@ public abstract class LogConsoleBase extends AdditionalTabComponent implements L
|
||||
@Override
|
||||
public void processTerminated(final @NotNull ProcessEvent event) {
|
||||
process.removeProcessListener(this);
|
||||
WriteIntentReadAction.run((Runnable)() ->stopRunning(true));
|
||||
if (EDT.isCurrentThreadEdt()) {
|
||||
WriteIntentReadAction.run((Runnable)() -> stopRunning(true));
|
||||
}
|
||||
else {
|
||||
ApplicationManager.getApplication().invokeAndWait(() -> {
|
||||
stopRunning(true);
|
||||
}, ModalityState.any());
|
||||
}
|
||||
}
|
||||
};
|
||||
process.addProcessListener(stopListener);
|
||||
|
||||
Reference in New Issue
Block a user