code: protected void checkTimeouts() {
  		long now = System.currentTimeMillis();
  
  		// Check timeouted promises
  		PendingPromise pending;
  		Iterator<PendingPromise> i = promises.values().iterator();
  		boolean removed = false;
  		while (i.hasNext()) {
  			pending = i.next();
  			if (pending.timeoutAt > 0 && now >= pending.timeoutAt) {
  
  				// Action is unknown at this location
  				pending.promise.complete(new RequestTimeoutError(this.nodeID, pending.action));
  				i.remove();
  				removed = true;
  			}
  		}
  
  		// Check timeouted request streams
  		IncomingStream stream;
  		long timeoutAt;
  		Iterator<IncomingStream> j = requestStreams.values().iterator();
  		while (j.hasNext()) {
  			stream = j.next();
  			timeoutAt = stream.getTimeoutAt();
  			if (timeoutAt > 0 && now >= timeoutAt) {
  				stream.error(new RequestTimeoutError(this.nodeID, "unknown"));
  				requestStreamWriteLock.lock();
  				try {
  					j.remove();
  				} finally {
  					requestStreamWriteLock.unlock();
  				}
  				removed = true;
  			}
  		}
  
  		// Check timeouted response streams
  		j = responseStreams.values().iterator();
  		while (j.hasNext()) {
  			stream = j.next();
  			timeoutAt = stream.getTimeoutAt();
  			if (timeoutAt > 0 && now >= timeoutAt) {
  				stream.error(new RequestTimeoutError(nodeID, "unknown"));
  				responseStreamWriteLock.lock();
  				try {
  					j.remove();
  				} finally {
  					responseStreamWriteLock.unlock();
  				}
  				removed = true;
  			}
  		}
  
  		// Reschedule
  		if (removed) {
  			scheduler.execute(() -> {
  				reschedule(Long.MAX_VALUE);
  			});
  		} else {
  			prevTimeoutAt.set(0);
  		}
  	}
docs: --- CALL TIMEOUT CHECKER TASK ---