private void signalControlOpEnd(){
  controlOperationExecuting.set(false);
  LockSupport.unpark(controlWaiters.peek());
  if (controlWaiters.size() == 0) {
    Thread t=evalWaiters.poll();
    while (t != null) {
      LockSupport.unpark(t);
      t=evalWaiters.poll();
    }
  }
}

private void signalControlOpEnd ( ) { controlOperationExecuting . set ( false ) ; LockSupport . unpark ( controlWaiters . peek ( ) ) ; if ( controlWaiters . size ( ) == 0 ) { Thread t = evalWaiters . poll ( ) ; while ( t != null ) { LockSupport . unpark ( t ) ; t = evalWaiters . poll ( ) ; } } }
called when a control operation is finished . releases the lock for the next thread trying to call a control operation . if there are no additional threads trying to call control operations then unpark any evaluation threads that are waiting .
