protected synchronized void forciblyUnblockAllWaitingWorkers(Exception e) {
    Iterator iter = waitingReplyThreads.values().iterator();
    if (e == null) {
      e = new CfaslInputStreamClosedException("Communications terminated with Cyc.");
    }
    while (iter.hasNext()) {
      WaitingWorkerInfo waitingWorkerInfo = (WaitingWorkerInfo) iter.next();
      if (trace > API_TRACE_NONE) {
        Log.current.println("Interrupting reply worker " + waitingWorkerInfo.getWorker());
      }
      SubLWorkerEvent event = new SubLWorkerEvent(waitingWorkerInfo.getWorker(), SubLWorkerStatus.EXCEPTION_STATUS, e);
      waitingWorkerInfo.worker.fireSubLWorkerTerminatedEvent(event);
      iter.remove();
    }
  }