/// <summary>Enumerates all leased connections.</summary>
 /// <remarks>Enumerates all leased connections.</remarks>
 /// <since>4.3</since>
 protected internal virtual void EnumLeased(PoolEntryCallback <T, C> callback)
 {
     this.Lock.Lock();
     try
     {
         EnumEntries(this.leased.GetEnumerator(), callback);
     }
     finally
     {
         this.Lock.Unlock();
     }
 }
 /// <summary>Enumerates all available connections.</summary>
 /// <remarks>Enumerates all available connections.</remarks>
 /// <since>4.3</since>
 protected internal virtual void EnumAvailable(PoolEntryCallback <T, C> callback)
 {
     this.Lock.Lock();
     try
     {
         EnumEntries(this.available.GetEnumerator(), callback);
     }
     finally
     {
         this.Lock.Unlock();
     }
 }
 private void EnumEntries(IEnumerator <E> it, PoolEntryCallback <T, C> callback)
 {
     while (it.HasNext())
     {
         E entry = it.Next();
         callback.Process(entry);
         if (entry.IsClosed())
         {
             RouteSpecificPool <T, C, E> pool = GetPool(entry.GetRoute());
             pool.Remove(entry);
             it.Remove();
         }
     }
 }