private static void runWaiters(List<? extends Runnable> copy) {
    // do not run under lock
    for (Runnable runnable : copy) {
      try {
        runnable.run();
      }
      catch (ProcessCanceledException ignore) {
      }
      catch (Throwable e) {
        LOG.error(e);
      }
    }
  }
private static void runWaiters(List<? extends Runnable> copy)