@Override
    protected void action() {
      Set<SuspendContextImpl> suspendingContexts = SuspendManagerUtil.getSuspendingContexts(mySuspendManager, myThread);
      if (!suspendingContexts.isEmpty()) {
        logError("Trying to freeze already suspended thread " + myThread + " : " + suspendingContexts);
      }

      if (myThread.isEvaluating()) {
        throw new IllegalStateException("Trying to freeze evaluating thread " + myThread);
      }

      List<SuspendContextImpl> pausedSuspendAllContexts =
        ContainerUtil.filter(mySuspendManager.getPausedContexts(), c -> c.getSuspendPolicy() == EventRequest.SUSPEND_ALL);

      if (!pausedSuspendAllContexts.isEmpty()) {
        if (pausedSuspendAllContexts.size() > 1) {
          logError("A lot of paused suspend-all contexts: " + pausedSuspendAllContexts);
        }
        for (SuspendContextImpl suspendAllContext : pausedSuspendAllContexts) {
          if (!suspendAllContext.suspends(myThread)) {
            mySuspendManager.suspendThread(suspendAllContext, myThread);
          }
        }
        mySuspendManager.myExplicitlyResumedThreads.remove(myThread);
        SuspendManagerUtil.switchToThreadInSuspendAllContext(pausedSuspendAllContexts.get(0), myThread);
        return;
      }

      if (!mySuspendManager.isFrozen(myThread)) {
        mySuspendManager.freezeThread(myThread);
        SuspendContextImpl suspendContext = mySuspendManager.pushSuspendContext(EventRequest.SUSPEND_EVENT_THREAD, 0);
        suspendContext.setThread(myThread.getThreadReference());
        myDebugProcessDispatcher.getMulticaster().paused(suspendContext);
      }
    }
@Override
    protected void action()