void checkIfFinished(SearchPerformer performer) {
    SearchTask pendingTask = null;

    synchronized (tasks) {
      Iterator<SearchTask> it = tasks.iterator();
      while (it.hasNext() && pendingTask == null) {
        SearchTask task = it.next();
        if (task.getToken() == performer.getToken() && !task.isStopped()) {
          pendingTask = task;
        }

        if (task.isStopped()) {
          it.remove();
        }
      }
    }

    if (pendingTask == null) {
      onFinished(performer.getToken());
    }
  }