Mono.Remoting.Channels.Unix.HostConnectionPool.GetConnection C# (CSharp) Method

GetConnection() public method

public GetConnection ( ) : UnixConnection
return UnixConnection
		public UnixConnection GetConnection ()
		{
			UnixConnection connection = null;
			lock (_pool)
			{
				do
				{
					if (_pool.Count > 0) 
					{
						// There are available connections

						connection = (UnixConnection)_pool[_pool.Count - 1];
						_pool.RemoveAt(_pool.Count - 1);
						if (!connection.IsAlive) {
							CancelConnection (connection);
							connection = null;
							continue;
						}
					}

					if (connection == null && _activeConnections < UnixConnectionPool.MaxOpenConnections)
					{
						// No connections available, but the max connections
						// has not been reached yet, so a new one can be created
						// Create the connection outside the lock
						break;
					}

					// No available connections in the pool
					// Wait for somewone to release one.

					if (connection == null)
					{
						Monitor.Wait(_pool);
					}
				} 
				while (connection == null);
			}

			if (connection == null)
				return CreateConnection ();
			else
				return connection;
		}