private void addPendingJoin(InternalDistributedMember id) {
    synchronized (pendingJoinsLock) {
      List<InternalDistributedMember> oldPendingJoins = pendingJoins;
      if (!oldPendingJoins.contains(id)) {
        List<InternalDistributedMember> newPendingJoins = new ArrayList<>(oldPendingJoins);
        newPendingJoins.add(id);
        pendingJoins = newPendingJoins;
      }
    }
  }
Adds a pending join entry. Note: attempting to reuse the same ArrayList instance results in
some interesting deadlocks.
geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoteGfManagerAgent.java