Beispiel #1
0
        internal void PutConnection(IInnerConnection innerConnection)
        {
            Debug.WriteLineIf(CLI.FnTrace.Enabled, "ConnectionPool.PutConnection ()");

            // Was connection in use when the pool was last cleared?
            // If so, don't return it to the pool.
            if (innerConnection.TimeStamp < lastCleared)
            {
                innerConnection.Close();
                return;
            }

            innerConnection.OuterConnectionWeakRef = null;
            if (CanPool(innerConnection))
            {
                if (innerConnection.DistributedTransaction != null &&
                    ContextUtil.IsInTransaction &&
                    ContextUtil.TransactionId == (Guid)innerConnection.DistributedTransactionId)
                {
                    DoDtcPool(innerConnection);
                }
                else
                {
                    DoPool(innerConnection);
                }
            }
            else
            {
                innerConnection.Close();
            }
        }
Beispiel #2
0
        private void ExpireConnections(object state)
        {
            Debug.WriteLineIf(CLI.FnTrace.Enabled, "ConnectionPool.ExpireConnections ()");

            IInnerConnection connectionToClose = null;

            lock (this)
            {
                if (pool == null)
                {
                    return;
                }
                if (size > minSize)
                {
                    connectionToClose = pool[--size];
                }
            }
            if (connectionToClose != null)
            {
                Debug.WriteLineIf(Switch.Enabled, "Closing an expired connection.");
                try
                {
                    connectionToClose.Close();
                    connectionToClose.OuterConnectionWeakRef = null;
                }
                catch (Exception e)
                {
                    Debug.WriteLineIf(Switch.Enabled, "Error closing expired connections: " + e);
                    Trace.WriteLine("Error closing expired connections: " + e);
                }
            }
        }
Beispiel #3
0
        private void DoPool(IInnerConnection innerConnection)
        {
            try
            {
                innerConnection.Pool();
            }
            catch
            {
                innerConnection.Close();
                throw;
            }

            lock (this)
            {
                if (size < maxSize)
                {
                    pool[size++] = innerConnection;
                    return;
                }
            }

            innerConnection.Close();
        }
Beispiel #4
0
        private void DistributedTransactionEnd(object resource)
        {
            Debug.WriteLineIf(CLI.FnTrace.Enabled, "ConnectionPool.DistributedTransactionEnd ()");

            IInnerConnection innerConnection = (IInnerConnection)resource;

            innerConnection.OuterConnectionWeakRef = null;
            if (CanPool(innerConnection))
            {
                DoPool(innerConnection);
            }
            else
            {
                innerConnection.Close();
            }
        }
 internal void EnlistInnerConnection (IInnerConnection conn)
 {
     try
     {
         object dt = System.EnterpriseServices.ContextUtil.Transaction;
         conn.Enlist (dt);
         conn.DistributedTransaction = dt;
         conn.DistributedTransactionId = System.EnterpriseServices.ContextUtil.TransactionId;
         autocommit = false;
     }
     catch
     {
         conn.Close ();
         throw;
     }
 }
		private void DoPool (IInnerConnection innerConnection)
		{
			try
			{
				innerConnection.Pool ();
			}
			catch
			{
				innerConnection.Close ();
				throw;
			}

			lock (this)
			{
				if (size < maxSize)
				{
					pool[size++] = innerConnection;
					return;
				}
			}

			innerConnection.Close ();
		}
		internal void PutConnection (IInnerConnection innerConnection)
		{
			Debug.WriteLineIf (CLI.FnTrace.Enabled, "ConnectionPool.PutConnection ()");

            // Was connection in use when the pool was last cleared?
            // If so, don't return it to the pool.
            if (innerConnection.TimeStamp < lastCleared)
            {
				innerConnection.Close ();
                return;
            }

			innerConnection.OuterConnectionWeakRef = null;
			if (CanPool (innerConnection))
			{
				if (innerConnection.DistributedTransaction != null
					&& ContextUtil.IsInTransaction
					&& ContextUtil.TransactionId == (Guid) innerConnection.DistributedTransactionId)
					DoDtcPool (innerConnection);
				else
					DoPool (innerConnection);
			}
			else
			{
				innerConnection.Close ();
			}
		}