code: private <T> void addAsyncBufferEntry(StreamElementQueueEntry<T> streamElementQueueEntry) throws InterruptedException {
  		assert(Thread.holdsLock(checkpointingLock));
  
  		pendingStreamElementQueueEntry = streamElementQueueEntry;
  
  		while (!queue.tryPut(streamElementQueueEntry)) {
  			// we wait for the emitter to notify us if the queue has space left again
  			checkpointingLock.wait();
  		}
  
  		pendingStreamElementQueueEntry = null;
  	}
docs: Add the given stream element queue entry to the operator's stream element queue. This
  operation blocks until the element has been added.
  
  <p>For that it tries to put the element into the queue and if not successful then it waits on
  the checkpointing lock. The checkpointing lock is also used by the {@link Emitter} to output
  elements. The emitter is also responsible for notifying this method if the queue has capacity
  left again, by calling notifyAll on the checkpointing lock.
  
  @param streamElementQueueEntry to add to the operator's queue
  @param <T> Type of the stream element queue entry's result
  @throws InterruptedException if the current thread has been interrupted