code: <T> void finish(Request<T> request) {
          // Remove from the set of requests currently being processed.
          synchronized (currentRequests) {
              currentRequests.remove(request);
          }
          if (request.shouldCache()) {
              synchronized (waitingRequests) {
                  String cacheKey = request.getCacheKey();
                  Queue<Request<?>> waitingRequests = this.waitingRequests.remove(cacheKey);
                  if (waitingRequests != null) {
                      //todo add queue markers
  //                    if (JusLog.DEBUG) {
  //                        JusLog.v("Releasing %d waiting requests for cacheKey=%s.",
  //                                waitingRequests.size(), cacheKey);
  //                    }
                      // Process all queued up requests. They won't be considered as in flight, but
                      // that's not a problem as the cache has been primed by 'request'.
                      cacheQueue.addAll(waitingRequests);
                  }
              }
          }
      }
docs: Called from {@link Request#finish(String)}, indicating that processing of the given request
  has finished.
  <p/>
  <p>Releases waiting requests for <code>request.getCacheKey()</code> if
  <code>request.shouldCache()</code>.</p>