private void checkInvocation() {
      myProcess.getManagerThread().schedule(new DebuggerCommandImpl() {
        @Override
        protected void action() {
          if (myObsolete.get()) return;
          VirtualMachineProxyImpl virtualMachine = myThread.getVirtualMachine();
          virtualMachine.suspend();
          try {
            if (myObsolete.get()) return;
            if (myThreadBlockedMonitor.myInvocationWatching != null) {
              myProcess.logError("Another invocation on suspend-all thread " + myThread +
                                 " (" + mySuspendAllContext + ") while the previous one was not over yet " +
                                 myThreadBlockedMonitor.myInvocationWatching.mySuspendAllContext);
              return;
            }
            ThreadReference threadReference = myThread.getThreadReference();
            LOG.warn("Resume other threads because long invocation detected on " + myThread);
            myThreadBlockedMonitor.myInvocationWatching = InvocationWatcherNewImpl.this;
            myAllResumed.set(true);
            // resume all but this, this one is already resumed under evaluation
            myThread.suspendImpl();
            Set<ThreadReferenceProxyImpl> resumedThreads = mySuspendAllContext.myResumedThreads;
            if (resumedThreads != null) {
              for (ThreadReferenceProxyImpl thread : resumedThreads) {
                thread.suspendImpl();
              }
            }
            virtualMachine.resume();
            if (threadReference.suspendCount() != 1) {
              Set<SuspendContextImpl> suspendingContexts = SuspendManagerUtil.getSuspendingContexts(myProcess.getSuspendManager(), myThread);
              LOG.warn("Blocked thread detected during invocation on " + myThread + ": " + suspendingContexts);
            }
          }
          finally {
            virtualMachine.resume();
          }
          scheduleDiagnostics();
        }
      });
    }
private void checkInvocation()